package-lock.json 与 npm-shrinkwrap的区别
区别
- package-lock.json 不会发布到npm
- npm-shrinkwrap.json会发布到npm
- package-lock.json只对顶层依赖有效
- npm-shrinkwrap.json会对所有层级子依赖有效
- 因此npm-shrinkwrap.json会严格按照指定的版本下载依赖,导致同一个库由于多个不同的包传递依赖不同的版本,而形成多个版本同时存在的情况(当然这个不会有问题)
- package-lock.json则只需要兼容即可,同一个库大部分只有一个版本。
结论
一般使用package-lock.json是提倡的,无论是发布包到npm还是实际执行的代码(配合npm ci
而不是npm install
)。
如果你要严格界定版本与你开发时完全一致,则应该使用npm-shrinkwrap.json
。
参见
What is the difference between npm-shrinkwrap.json and package-lock.json?