阅读 220

package.json中依赖包版本^,~以及npm.lock你真的理解吗?

package.json是干什么的

npm init初始化一个模块或者创建一个项目,都有一个package.json文件,package.json就是这个模块的户口本,标明了这个模板的名字啊、爸爸妈妈等等信息。

dependencies和devdependencies是什么

  • dependencies:生产环境依赖
  • devdependencies:开发环境依赖

例如像react包就是我们线上环境需要用到的,而像babel解析语法的包我们只需要开发环境用到。

npm install react --save 保存到dependencies (--save可以省略)

npm install react --dev 保存到devdependencies

提示:dependencies在开发环境依然能用, 而devdependencies并不能在生产环境中使用,大家仔细品一下。

版本号前~、^是干什么的?

"react":^16.13.1,"redux": "^4.0.1","babel-eslint": "~7.2.1"
复制代码

我们常在package.json中看到~或者^,难道他们是装饰吗?

  • 版本号

版本号分3个部分 【大版本,小版本,补丁】,例如我们见到的版本号通常都是16.5.8。

~ 补丁版本为最新,小版本及大版本不变。

^ 小版本以及补丁版本为最新,大版本不变。

举个栗子

^16.5.2 我们安装的时候,如果最新版本为17.8.6,我们安装的话,包就会更新到16.8.6。

~16.5.2 我们安装的时候,如果最新版本为17.8.6,我们安装的话,包就会更新到16.5.6。

npm.lock

我们在项目开发中安装一个依赖 react:^16.5.2,第二天另一个人在开发项目中react更新到了16.6.2,可能会导致问题。

按正常来说一个安装包小版本的更新并不会对整个大版本影响,但不乏有些人他可能就不想这么做,或者这个16.6.2修复的BUG正好会影响到我们的项目。

我们在npm i的时候会生成npm.lock,如果你想别人跟你安装相同版本的依赖,可以将npm.lock提上去。

npm ci

npm i 的时候,优先会去找npm.lock中的版本安装,如果没有的话,则会按照pageage.json中去安装然后更新npm.lock,如果你不想去更新npm.lock,使用npm ci,如果npm.lock中没有,则不会去安装而报错。