前置知识:先了解一下package.json和package-lock.json的关系和区别,请看这篇文章
然后我们来说一下改怎么锁定版本?
首先肯定是要把package.json中的 ^ 这个符号去掉,但是如果你只去掉package.json中的 ^那就太天真了,一定有大坑等着你,因为我们实际上是用的package-lock.json中的版本。【没错,我就刚从大坑中出来。。】
在没有锁定版本之前,我们的项目是这样的
如果只去掉package.json中的 ^ , 而不修改package-lock.json文件,那么一般不会出现问题,因为到其他环境也是按照package-lock.json安装。但是,有几种情况会出问题
(1)如果你使用cnpm那问题就大了,因为cnpm没有版本锁定的功能,cnpm不会根据package-lock.json安装,所以会安装4.13.0版本,和我们实际用的不符,这很有可能出问题的。
(2)在安装失败的时候,我们有时候习惯的删除package-lock.json文件,然后再install,这个时候就悲剧了,重新安装之后package-lock.json中也是4.13.0版本了。然后如果你把这个package-lock.json再提交,所有同事都会安装一个错误的版本。
所以,我们锁定版本应该根据package-lock.json实际应用的版本更新package.json,上面例子中就是在package.json中更改node-sass为4.14.1版本,并去掉前面的 ^ 。这样基本就不会又问题了。
但是还有一个问题,按照上述方法锁定的版本指锁定了我们项目的依赖版本,但是间接依赖的版本却没有锁定。参考请将你的npm依赖版本锁定 - 掘金
不过我遇到的项目中按照我这篇文章的方法设定就行了,因为一般不会出问题,而且简单方便,大家可以自行选择。