package.json中^符号和~符号前缀的区别
node的各种包都有版本控制,迭代都非常快,版本号经常由三个数字来表示迭代,比如
"vue": "^2.6.10",
"vuedraggable": "^2.24.1",
"vuex": "^3.1.1",
"webpack-merge": "~4.2.2"
对应上面的版本号以 x.y.z :为例子
-
z :表示一些小的bugfix, 更改z的号,
-
y :表示一些大的版本更改,比如一些API的变化
-
x :表示一些设计的变动及模块的重构之类的,会升级x版本号
在package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^。
~的意思是匹配最近的小版本 比如~1.0.2将会匹配所有的1.0.x版本,但不匹配1.1.0
^的意思是最近的一个大版本 比如1.0.2 将会匹配 所有 1.x.x, 但不包括2.x.x
锁定版本
在我们日常项目开发中,经常会依赖大量的包,而且各种包或者包内部都有依赖关系,且项目的生命周期通常都会经过很长时间,期间依赖的各种包难免会升级, 当我们部署项目提交代码后,当再次重新下载依赖的时候,难免会因为包版本的问题导致各种各样的bug
方法一:
安装精确版本,比如"vue": "2.6.10"
方法二:
npm shrinkwrap
npm shrinkwrap--dev # 将dev-dependencies计算在内
这会生成一个 shrinkwrap.json 文件,该文件包含了你正在使用的模块的指定版本。当运行 npm install时,该文件所指定的模块版本会覆盖 package.json 文件中所指定的版本。注意,运行此命令的时候最好删除nodemodules文件夹重新安装依赖
方法三:
使用yarn来管理依赖
yarn是一个与npm兼容的node包管理器。使用它安装npm包,会自动在项目目录中创建一个yarn.lock文件。该文件包含了当前项目中所安装的依赖包的版本信息。其他人在使用yarn安装项目的依赖包时就可以通过该文件创建一个完全相同的依赖环境。