何时使用收缩膜、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以指向该本地捆绑包

    这样,您的项目就完全锁定,完全可以脱机使用,而且安装速度更快。

    还有这个。。。哈+