文章目录
一、package.json
开发者在下载依赖包时使用–save 命令,package.json就会记录该依赖包的依赖信息【如
npm install axios --save
】
因此,package.json中只会保存开发者想要保存的依赖包
配置项 | 用途 |
---|---|
version | 表明了当前的版本。 |
name | 设置了应用程序/软件包的名称。 |
description | 是应用程序/软件包的简短描述。 |
main | 设置了应用程序的入口点。 |
private | 如果设置为 true ,则可以防止应用程序/软件包被意外地发布到 npm 。 |
scripts | 定义了一组可以运行的 node 脚本。【npm run dev ,npm run serve 等就是在这里定义的】 |
dependencies | 设置了作为依赖安装的 npm 软件包的列表。 |
devDependencies | 设置了作为开发依赖安装的 npm 软件包的列表。 |
engines | 设置了此软件包/应用程序在哪个版本的 Node.js 上运行。 |
browserslist | 用于告知要支持哪些浏览器(及其版本)。 |
二、package-lock.json
它比package.json更好地保证了,下载该项目的人通过
npm install
安装依赖时,安装的依赖包版本完全相同。
-
当安装包时,npm会生成或更新
package-lock.json
-
package-lock.json
文件会保存node_modules
中所有包的信息(包括精确版本version
和下载地址resolved
以及依赖关系dependencies
等)这样
npm install
时速度就会提升
三、"^3.21.2" 版本号
1. 版本号的含义
软件包的当前版本"version": "1.0.0"
遵循版本的语义版本控制记法,这意味着版本始终以 3 个数字表示:x.x.x
。
第一个数字是主版本号,第二个数字是次版本号,第三个数字是补丁版本号。
具有重大更改的是主版本;引入向后兼容的更改的版本是次版本;仅修复缺陷的版本是补丁版本。
但不排除有些软件包版本不符合规范
2. package.json和依赖包版本
在package.json和package-lock.json中记录依赖包的意义
在将项目提交到git上时,无需将 node_modules 文件夹(该文件夹保存着通过npm或yarn安装的依赖包,通常很大)提交。在其他用户下载了项目后,通过
npm install
即可安装这些依赖包。
控制依赖包版本的意义:
防止下载了项目后,在通过
npm install
安装时,依赖包被自动升级成最新版本【有时一些依赖包的新版本会变更甚至删除API参数,容易导致项目出错】。
package.json中如何控制npm install的依赖包版本
在 package.json 中,可以使用 semver 表示法设置要升级到的版本(补丁版本或次版本),例如:
- 如果写入的是
〜0.13.0
,则只更新补丁版本:即0.13.1
可以,但0.14.0
不可以。 - 如果写入的是
^0.13.0
,则要更新补丁版本和次版本:即0.13.1
、0.14.0
依此类推。 - 如果写入的是
0.13.0
,则始终使用确切的版本。
当尝试使用
npm install
命令在另一台机器上复制项目时,如果指定了〜
语法并且项目依赖的软件包发布了补丁版本,则该补丁版本软件包会被安装。^
和次版本也一样。如果指定确切的版本,例如示例中的0.13.0
,则不会受到此问题的影响。
package.json和package-lock.json的区别
-
package.json
定义的是锁住主版本。如"express":"^3.21.2"
,锁住了第一位的版本,后面的小版本可以改变。也就是可能会自动下载成3.5.3这种。 -
package-lock.json
定义的是锁住小版本,并提供了下载链接和验证。能够保证别人下载项目通过npm install初始化依赖时,与项目定义的依赖版本完全相同。