检查node_modules与shrinkwrap

检查node_module是社区标准,但现在我们也可以select使用shrinkwrap。 后者对我来说更有意义,但总有人有机会“强行发布”并引入了一个bug。 还有其他的缺点吗?

我最喜欢的关于这个主题的文章/哲学一直回到(在node.js领域很长一段时间)到2011年:

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

直接引用:

如果你有一个你部署的应用程序,检查你所有的依赖关系到node_modules中。 如果你使用npm做部署,只为这些模块定义bundleDependencies。 如果你有需要编译的依赖关系,你应该检查代码,然后在deploy上运行$ npm rebuild。

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

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

力量发布的情况是罕见的, npm shrinkwrap可能适用于大多数人。 但是,如果您正在部署到生产环境,那么没有任何东西可以让您像检查整个node_modules目录那样node_modules

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

如果你想避免拜占庭式的作者用代码打破你的应用程序的风险,你可以修改shrinkwrap文件来使用git URL引用而不是版本号,这样npm总是从git中获取所有的包。

当然,有人可能会运行一个奇怪的git rebase或者什么,并修改一个git commit hash …但是现在我们正在变得疯狂。

npm FAQ直接回答这个问题:

  • 检查node_modules到你部署的东西,如网站和应用程序的git。
  • 不要将node_modules检查到git中,以便重用库和模块。
  • 使用npm来pipe理你的开发环境中的依赖关系,但不能在你的部署脚本中。

从npm FAQ引用