NodeJS和NPM:build议检查模块到git中的问题

我有问题,遵循'官方'的build议,检查所有外部依赖git(文章http://www.mikealrogers.com/posts/nodemodules-in-git.html链接fron FAQ)

  1. 您如何确保不仅检入顶级依赖项? 大多数npm模块目前不遵循这个build议。 它们都有.gitignore中的node_modules。 只是删除他们的.gitignore似乎有风险。

  2. 对于编译模块,本文build议只检查源代码并运行“npm rebuild”并部署时间。 不幸的是,'npm rebuild'不会为所有模块做一个'clean make'(尽pipe我使用的是npm版本1.0.106中包含的错误修正https://github.com/isaacs/npm/issues/1872 )。 这意味着我必须防止编译目标被检入(否则,我将为生产计算机上的开发人员机器编译目标代码,而不会被npm重build所覆盖)。 但是:我该怎么做? 不幸的是,这些模块没有一个通用的编译输出目录,所以只需要git-ignoring“node_modules / / build”和“/ node_modules / / out /”(正如在这篇好文章中提到的)eng.yammer.com/blog/2012/ 1/4 / managing-nodejs-dependencies-and-deployments-at-yammer.html在任何情况下都不起作用。

短版本:如何确保生产服务器使用与开发期间使用的所有相关模块完全相同的版本?

更新:现在有npm shrinkwrap ,它解决了locking精确依赖版本的问题,甚至依赖关系的依赖! 更多信息在这里。

检查node_modules可能会有问题,因为它运行的环境可能因用户而异 – 所以在某些环境下编译的内容可能不适用于另一个环境。 另外,它会用第三方代码填写你的更新日志和存储库。 我认为这个问题是你用简短的问题来解决的,所以让我来解决这个问题。

短版本:如何确保生产服务器使用与开发期间使用的所有相关模块完全相同的版本?

在你的package.json ,会有dependencies: {} ,如果它不存在,那么添加它。 为了完成你想要的,把你的依赖关系作为关键字,以及它们的确切版本作为值。 例如dependencies: { docpad: '2.5.0', mocha: '1.1.0' }

但是,通常(取决于作者)升级到修订号(xxX号)只是错误修正和安全。 您可以通过执行dependencies: { docpad: '2.5.x', mocha: '1.1.x' }来允许进行较小的更改dependencies: { docpad: '2.5.x', mocha: '1.1.x' }这样dependencies: { docpad: '2.5.x', mocha: '1.1.x' }必须更新package.json,并在每次发布修补程序版本时执行发布。 如果你愿意,你甚至可以做2.x事情。

这是我为所有模块使用的解决scheme,因为它可以确保即使6个月之后,或者任何模块仍然能够工作 – 而像>= 2.0.0意味着当依赖关系的v3出现时,当时你的模块可能无法使用。 确保您坚持特定版本“保证”一段时间的稳定性。

作为参考,你可以看到我在我的开源node.js模块中做了这个

关于你的依赖的.gitignore(在“node_modules”中),npm 1.1忽略了.gitignore文件,所以它们没有被安装。

 npm 1.1 will exclude .gitignore files from the things it installs. npm 1.0 did not have this feature, so you have to be careful about that. Deleting them recursively is fine: find node_modules -name .gitignore | xargs rm But, in npm 1.1, you never have to do this, because it excludes them from the install automatically. 

这是来自首席本人(艾萨克), 它在这里似乎几乎涵盖了一切。 我所遇到的“无关紧要的”问题一定是我所做的事情,我会尝试一个干净的设置。