何时使用 shrinkwrap、npm-lockdown 或 npm-seal
When to use shrinkwrap, npm-lockdown, or npm-seal
我的背景更熟悉 composer
。我正在 gulp
(等)进行构建过程并学习 node
以及如何使用 npm
。
非常奇怪(同样,来自 composer
背景)默认情况下不包含 composer.lock
类清单。话虽如此,我一直在阅读有关 [shrinkwrap]、[npm-lockdown] 和 [npm-seal] 的文档。 ...我阅读的文档越多,我就越困惑我应该选择哪一个(每个人都认为他们的方式是最好的方式)。我注意到的一个问题是 npm-seal
在 4 年内没有变化,npm-lockdown
在 8 个月内没有变化——这一切让我想知道这是不是因为最新版本的 [= 不需要它13=]...
- 各自的优点/缺点是什么?
- 在什么情况下我会在项目 A 中使用一个替代另一个,但在项目 B 中使用另一个?
- 每一项将如何影响我们的开发工作流程?
PS:如果您为每一个都提供了最基本的实现示例,则加分。 ;)
好问题 - 除了 shrinkwrap
,我将跳过所有内容,因为根据 NPM's docs.
,这是 de-facto 的方法
长话短说 npm-shrinkwrap.json
文件类似于您在所有其他包管理器中使用的 lock
文件,尽管 NPM 允许同一包的不同版本通过隔离很好地协同工作- 从字面上将不同的整个版本范围界定并复制到树的不同级别的 node_modules
。如果彼此 parent-child 的两个项目使用完全相同的版本,NPM 将仅将该版本复制到父项目,子项目将遍历树以查找包。
最佳做法是简单地为您的直接依赖更新 package.json
,运行 npm install
,验证开发过程中的一切正常,然后 运行 npm shrinkwrap
当你刚要提交并推送时。 注意: 确保在 运行 宁 npm install
之前 rm npm-shrinkwrap.json
在积极的开发过程中 - 如果您的直接依赖关系发生了变化,您需要 package.json
要用的,不要锁!还要在您的 .gitignore
中包含 node_modules
或在您的源代码控制系统中包含等效项。然后,当您部署并进入 运行 项目时,运行 npm install
像往常一样。如果 npm 找到一个 npm-shrinkwrap.json
文件,它将使用该文件递归地拉取所有锁定的模块,并且它将忽略您的项目和所有依赖项目中的 package.json
。
npm shrinkwrap
是锁定依赖项的最标准方式。是的,npm install
默认情况下不会创建它,这很遗憾,npm 创建者绝对应该改变它。
npm-lockdown
正在尝试做与 npm shrinkwrap
相同的事情,npm-lockdown
有两点更好:它可以更好地处理可选依赖项并验证包裹:
https://www.npmjs.com/package/lockdown#related-tools
这两个功能对我来说似乎都不太相关;我对 npm shrinkwrap
很满意:例如,npmjs 保证一旦你在某个版本上传某个包,它就保持不变 - 所以检查 sha 校验和不是那么热(我从来没有遇到过由此引起的错误).
seal
与 npm shrinkwrap
一起使用。它添加了 'checksum checking' 方面。它看起来被遗弃而且很原始。
您可能会发现 shrinkpack 很有用——它会检查 npm install
下载的 tarball 并将它们捆绑到您的存储库中,然后最终重写 npm-shrinkwrap.json 以指向该本地包相反。
这样,您的项目就完全锁定了,完全可以离线使用,并且安装起来快得多。
我的背景更熟悉 composer
。我正在 gulp
(等)进行构建过程并学习 node
以及如何使用 npm
。
非常奇怪(同样,来自 composer
背景)默认情况下不包含 composer.lock
类清单。话虽如此,我一直在阅读有关 [shrinkwrap]、[npm-lockdown] 和 [npm-seal] 的文档。 ...我阅读的文档越多,我就越困惑我应该选择哪一个(每个人都认为他们的方式是最好的方式)。我注意到的一个问题是 npm-seal
在 4 年内没有变化,npm-lockdown
在 8 个月内没有变化——这一切让我想知道这是不是因为最新版本的 [= 不需要它13=]...
- 各自的优点/缺点是什么?
- 在什么情况下我会在项目 A 中使用一个替代另一个,但在项目 B 中使用另一个?
- 每一项将如何影响我们的开发工作流程?
PS:如果您为每一个都提供了最基本的实现示例,则加分。 ;)
好问题 - 除了 shrinkwrap
,我将跳过所有内容,因为根据 NPM's docs.
长话短说 npm-shrinkwrap.json
文件类似于您在所有其他包管理器中使用的 lock
文件,尽管 NPM 允许同一包的不同版本通过隔离很好地协同工作- 从字面上将不同的整个版本范围界定并复制到树的不同级别的 node_modules
。如果彼此 parent-child 的两个项目使用完全相同的版本,NPM 将仅将该版本复制到父项目,子项目将遍历树以查找包。
最佳做法是简单地为您的直接依赖更新 package.json
,运行 npm install
,验证开发过程中的一切正常,然后 运行 npm shrinkwrap
当你刚要提交并推送时。 注意: 确保在 运行 宁 npm install
之前 rm npm-shrinkwrap.json
在积极的开发过程中 - 如果您的直接依赖关系发生了变化,您需要 package.json
要用的,不要锁!还要在您的 .gitignore
中包含 node_modules
或在您的源代码控制系统中包含等效项。然后,当您部署并进入 运行 项目时,运行 npm install
像往常一样。如果 npm 找到一个 npm-shrinkwrap.json
文件,它将使用该文件递归地拉取所有锁定的模块,并且它将忽略您的项目和所有依赖项目中的 package.json
。
npm shrinkwrap
是锁定依赖项的最标准方式。是的,npm install
默认情况下不会创建它,这很遗憾,npm 创建者绝对应该改变它。
npm-lockdown
正在尝试做与 npm shrinkwrap
相同的事情,npm-lockdown
有两点更好:它可以更好地处理可选依赖项并验证包裹:
https://www.npmjs.com/package/lockdown#related-tools
这两个功能对我来说似乎都不太相关;我对 npm shrinkwrap
很满意:例如,npmjs 保证一旦你在某个版本上传某个包,它就保持不变 - 所以检查 sha 校验和不是那么热(我从来没有遇到过由此引起的错误).
seal
与 npm shrinkwrap
一起使用。它添加了 'checksum checking' 方面。它看起来被遗弃而且很原始。
您可能会发现 shrinkpack 很有用——它会检查 npm install
下载的 tarball 并将它们捆绑到您的存储库中,然后最终重写 npm-shrinkwrap.json 以指向该本地包相反。
这样,您的项目就完全锁定了,完全可以离线使用,并且安装起来快得多。