依赖包的版本限制
我们通常在package.json文件中看到如下:
"dependencies": {
"express": "^4.16.3",
"lodash": "^4.17.10"
}
key 是依赖的包名称,value 是这个包的版本。那版本前面的 ^ 或者版本直接是一个 * 是什么意思呢?
这就需要先了解 npm 包提供者应该注意的版本号规范。
如果一个项目打算与别人分享,应该从 1.0.0 版本开始。以后要升级版本应该遵循以下标准:
- 补丁版本:解决了 Bug 或者一些较小的更改,增加最后一位数字,比如 1.0.1
- 小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0
- 大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0
了解了提供者的版本规范后, npm 包使用者就可以针对自己的需要填写依赖包的版本规则。
作为使用者,我们可以在 package.json 文件中写明我们可以接受这个包的更新程度(假设当前依赖的是 1.0.4 版本):
- 如果只打算接受补丁版本的更新(也就是最后一位的改变),就可以这么写:
"1.0"
"1.0.x"
"~1.0.4" - 如果接受小版本的更新(第二位的改变),就可以这么写:
"1"
"1.x"
"^1.0.4" - 如果可以接受大版本的更新(自然接受小版本和补丁版本的改变),就可以这么写:
" * "
" x "
小结一下:总共三种版本变化类型,接受依赖包哪种类型的更新,就把版本号准确写到前一位。
package.json
管理本地安装 npm 包的最好方式就是创建 package.json 文件。
一个 package.json 文件可以有以下几点作用:
1. 作为一个描述文件,描述了你的项目依赖哪些包
2. 允许我们使用 “语义化版本规则”指明你项目依赖包的版本
3. 让你的构建更好地与其他开发者分享,便于重复使用
4. 如果当前项目有 package.json 文件,下载包时会下载这个文件中指定的版本;
如果当前项目中没有 package.json 文件,就会下载指定包的最新版本。
创建:使用 npm init 即可在当前目录创建一个 package.json 文件
有时下载会报错:npm install error saveError ENOENT: no such file or directory, open '/Users/zhangshixin/package.json'
解决办法:
- 在目录下执行 npm init 创建 package.json,输入初始化信息
- 然后再执行下载命令
npm update 的工作过程:
- 先到远程仓库查询最新版本
- 然后对比本地版本,如果本地版本不存在,或者远程版本较新
- 查看 package.json 中对应的语义版本规则
- 如果当前新版本符合语义规则,就更新,否则不更新
install
- npm uninstall express时,被卸载的包的依赖包也同时被卸载
- npm install packname时,会更新package-lock.json和node-modules,如果没有这俩文件的时候会先创建,即第一次install的时候会自动生成这俩文件(夹)