设计美学
所有的设计最终一定是符合大众对事物的认知的,一定是满足大部分人的使用习惯的。
「平平淡淡才是真」
为什么需要 package-lock.json
在 npm 5.0 版本之前,如果在 package.json 中某个依赖库版本加上 ^ 或者 ~ 的前缀,那么下次安装的时候,如果该依赖库有升级,那么默认就会安装符合前缀要求的最新的版本,这样就可能导致同一个 package.json,在不同时间安装的依赖库版本号可能不一致。所以 npm 对版本号的命名做了一些规范,小版本号之间的升级只是做一些小改动,不要影响之前版本的运行
但是
「理想往往会被现实打脸」
因为只是规范,没有强约束(也没法强约束),架不住有的依赖库作者不按这个来。
所以就必须锁住版本,就直接在项目中不要用 ^~ 等前缀,写死版本号,这样就没啥问题了。
但是
npm 不能这么干啊,npm 要这么干那都得乱套,所以就新增一个版本锁文件吧(我猜的)
那不就是 package-lock.json
善变的规则
npm 5.0 - 5.6 中间,群魔乱舞,package-lock.json 的处理逻辑一直在改。
- 要么是升级了 package.json 的版本号,然后再次安装的时候,还是之前的版本(因为 package-lock 就是之前的版本)。
- 要么是 package-lock 文件就是个摆设,npm install 的时候无论 package-lock 文件是怎么样的,默认都会安装最新版本
5.6 之后的规则终于符合大众的认知了, 当 package.json 没有更新的时候,默认安装 package-lock 中指定的版本,如果 package.json 有更新,则安装 package.json 中的版本,然后同步到 package-lock 中。
起码从我的认知来讲,这样是最合适的,又能锁版本,又能更新版本。
