携程实习篇|package.json和package-lock.json的区别

package.json:
通过 npm init 命令创建,主要用来定义这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
【携程实习篇|package.json和package-lock.json的区别】
package-lock.json:
在 npm install 时候自动生成,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
跟package.json的区别在于:

"devDependencies": { "webpack": "^1.12.13", "webpack-dev-server": "^1.14.1" }


这里的^向上尖号是定义向后(新)兼容依赖,如果webpack版本是超过1.12.13,并且是在大版本(1)上相同,就允许下载最新的webpack包。同一个大版本不同版本号之间存在差异,导致依赖库包行为特征有时候不兼容。
所以npm最新的版本就开始自动生成package-lock.json功能,目的就是确保所有库包与你上次安装的完全一样。
package.json文件只能锁定大版本,即版本号的第一位,不能锁定后面的小版本,你每次npm install时候拉取的该大版本下面最新的版本,可能有些童鞋之前就踩过类似的坑。
一般为了稳定性考虑我们不能随意升级依赖包,因为如果换包导致兼容性bug出现很难排查,所以package-lock.json就是来解决包锁定不升级问题的。
如果要升级package-lock.json里面的库包,怎么操作呢?
npm install XXX@x.x.x

    推荐阅读