首先明晰一下二者的结构
package.json:
- scripts:脚本
- dependencies:生产环境依赖
- devDependencies:开发环境依赖
- engines:指定node和npm的版本范围 check-version中使用
- browserslist:节点
^的意思是 向新兼容
"axios": "^0.21.1"
所以如果当前axios的最新版本是0.21.1,没有lock的情况下install 会下载下大版本号(第一位版本号)下的最新版本,而package-lock会把版本锁定到小版本。
语义化版本控制
例如:1.2.3,主要版本1,次要版本2,补丁3。
补丁中的更改表示不会破坏任何内容的错误修复。
次要版本的更改表示不会破坏任何内容的新功能。
主要版本的更改代表了一个破坏兼容性的大变化。 如果用户不适应主要版本更改,则内容将无法正常工作。
节点
package-lock.json:
npm更新到v5.x.x以后,会出现一种新的自动生成文件 package-lock.json,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
简言之:package.json锁定了大版本依赖,而package-lock.json锁定了具体依赖