何时使用收缩膜、npm锁定或npm密封
我来自一个更熟悉何时使用收缩膜、npm锁定或npm密封,npm,npm-shrinkwrap,Npm,Npm Shrinkwrap,我来自一个更熟悉composer的背景。我正在进行gulp(etc)构建过程,学习node以及如何使用npm 非常奇怪的是(同样来自编写器背景),默认情况下不包括类似编写器.lock的清单。话虽如此,我一直在阅读[shrinkwrap]、[npm lockdown]和[npm seal]的文档。。。我读的文档越多,我就越不清楚应该选择哪一种(每个人都认为他们的方式是最好的方式)。我注意到的一个问题是,npm seal在4年内没有改变,而npm lock在8个月内没有改变——这一切让我怀疑这是否是
composer
的背景。我正在进行gulp
(etc)构建过程,学习node
以及如何使用npm
非常奇怪的是(同样来自编写器背景),默认情况下不包括类似编写器.lock的清单。话虽如此,我一直在阅读[shrinkwrap]、[npm lockdown]和[npm seal]的文档。。。我读的文档越多,我就越不清楚应该选择哪一种(每个人都认为他们的方式是最好的方式)。我注意到的一个问题是,npm seal
在4年内没有改变,而npm lock
在8个月内没有改变——这一切让我怀疑这是否是因为最新版本的npm
不需要它
每种方法的优点/缺点是什么
在什么情况下,我会在项目A中使用一个,而在项目B中使用另一个
它们将如何影响我们的开发工作流程
附言:如果你为每一项都提供了最基本的实现示例,那么你会得到分数 好问题-我将跳过所有内容,但是收缩包装
,因为这是一种事实上的方法
长话短说,npm shrinkwrap.json
文件类似于您在其他所有包管理器中使用的lock
文件,尽管NPM允许同一软件包的不同版本通过隔离在一起玩得很好,但实际上,它可以在树的不同级别将不同的完整版本范围和复制到node\u模块中。如果两个互为父子项目的项目使用完全相同的版本,NPM将只将版本复制到父项目,子项目将遍历树以查找包
最好的做法是简单地为您的直接依赖项更新package.json
,运行npm install
,在开发过程中验证一切正常,然后在即将提交和推送时运行npm shrinkwrap
注意:在活动开发期间运行npm install
之前,请确保rm npm shrinkwrap.json
-如果您的直接依赖项已更改,则您希望使用package.json
,而不是锁!在.gitignore
或您的源代码管理系统中包含node\u模块
。然后,当您部署并开始运行项目时,像平常一样运行npm install
。如果npm发现一个npm shrinkwrap.json
文件,它将使用该文件递归地拉取所有锁定的模块,并在您的项目和所有依赖项目中忽略package.json
。npm shrinkwrap
是锁定依赖项的最标准方法。是的,npm安装
默认情况下不会创建它,这是一个遗憾,npm创建者肯定应该更改它
npm-lockdown
正试图做与npm-shrinkwrap
相同的事情,npm-lockdown
有两个小点更好:它更好地处理可选依赖项,并验证包的校验和:
这两个特征对我来说似乎都不太相关;我对npm shrinkwrap非常满意:例如,npmjs保证,一旦您以特定版本上传特定包,它将保持不变-因此检查sha校验和并没有那么热(我从未遇到过由此引起的错误)
密封件
应与npm收缩膜一起使用
。它添加了“校验和检查”方面。它看起来被抛弃了,非常原始。您可能会发现它很有用–它会检查tarball,npm install下载并将其捆绑到您的存储库中,然后最终重写npm-shrinkwrap.json以指向该本地捆绑包
这样,您的项目就完全锁定,完全可以脱机使用,而且安装速度更快。还有这个。。。哈+