检入node_modules与shrinkwrap

时间:2012-07-12 20:04:23

标签: node.js npm

签入node_module是社区标准,但现在我们还可以选择使用shrinkwrap。后者对我来说更有意义,但总有可能有人“强制发布”并引入了一个错误。还有其他缺点吗?

2 个答案:

答案 0 :(得分:15)

我最喜欢的关于这个主题的帖子/哲学一直追溯到很久(在node.js很长一段时间内)到2011年:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

直接引用:

  

如果您有部署的应用程序,请检入node_modules中的所有依赖项。如果使用npm do deploy,则仅为这些模块定义bundleDependencies。如果您有需要编译的依赖项,您仍应检入代码并在部署时运行$ npm rebuild。

     

我告诉过的每个人都告诉我,我是一个白痴,然后几个星期后告诉我我是对的,检查node_modules到git一直是部署和开发的祝福。它客观上更好,但这里有一些我似乎得到的问题/抱怨。

我认为这仍然是最好的建议。

强制发布方案很少见,npm shrinkwrap可能适用于大多数人。但是,如果您正在部署到生产环境中,那么无需像在整个node_modules目录中检查那样让您高枕无忧。

或者,如果你真的,真的不想检查node_modules目录但想要更好的保证没有强制推送,我会遵循npm help shrinkwrap中的建议:

  

如果您想避免拜占庭作者用破坏您的应用程序的代码替换您正在使用的软件包的任何风险,您可以修改shrinkwrap文件以使用git URL引用而不是版本号,以便npm始终获取所有软件包来自git。

当然,有人可能会运行一个奇怪的git rebase或其他东西并修改一个git commit hash ...但现在我们只是变得疯狂。

答案 1 :(得分:2)

npm常见问题解答直接回答:

  
      
  • 将node_modules检查为git,以查找您部署的内容,例如网站   和应用程序。
  •   
  • 不要将node_modules检查为库和模块的git   打算重复使用。
  •   
  • 使用npm管理开发中的依赖项   环境,但不在您的部署脚本中。
  •   

引自npm FAQ