node.js - NodeJS 和 NPM : problems following recommendation to check modules into git

标签 node.js npm

我在遵循“官方”建议将所有外部依赖项 checkin git 时遇到问题(文章 http://www.mikealrogers.com/posts/nodemodules-in-git.html 链接自常见问题解答)

  1. 如何确保不仅 checkin 顶级依赖项?大多数 npm 模块目前不遵循建议。他们都有自己的 node_modules 在 .gitignore 中。仅仅删除他们的 .gitignore 似乎有风险。

  2. 对于已编译的模块,文章建议仅 checkin 源代码并运行“npm rebuild”和部署时间。不幸的是,'npm rebuild' 不会对所有模块进行 'clean make'(尽管错误修复 https://github.com/isaacs/npm/issues/1872 包含在我正在使用的 npm 版本 1.0.106 中)。这意味着我必须防止编译目标被 checkin (否则我会在生产机器上为开发机器编译目标代码,而不会被 npm rebuild 覆盖)。但是:我该怎么做?不幸的是,这些模块没有通用的编译输出目录,因此只需忽略“node_modules//build”和“/node_modules//out/”(如这篇好文章 eng.yammer 中所述.com/blog/2012/1/4/managing-nodejs-dependencies-and-deployments-at-yammer.html 并非在所有情况下都有帮助。

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

最佳答案

更新:现在有 npm shrinkwrap 解决了锁定确切依赖版本的问题,甚至是依赖的依赖! More info here.

checkin node_modules 可能会有问题,因为它运行的环境可能因用户而异 - 因此在某些环境中编译的内容可能无法在其他环境中运行。另外,它会用第 3 方代码填充您的变更日志和存储库。我认为这是您对问题的简短版本得出的结论,所以让我来解决这个问题。

Short version: how do you make sure that production servers use the exact same version of all dependent modules as you use during development?

在你的package.json里面,会有dependencies:{},如果没有,那就添加吧。要完成您想要的,请将您的依赖项添加为键,并将它们的确切版本添加为值。例如。 dependencies: { docpad: '2.5.0', mocha: '1.1.0' }

然而,通常(这取决于作者)升级到修订号(x.x.X 号)只是错误修复和安全。您可以通过执行 dependencies: { docpad: '2.5.x', mocha: '1.1.x' } 允许进行微小的更改,这样您就不必更新 package.json 并每次都在那里发布是一个错误修复版本。如果愿意,您甚至可以执行 2.x 之类的操作。

这是我对我的所有模块使用的解决方案,因为它确保即使在 6 个月后或任何模块仍然可以工作 - 而执行类似 >= 2.0.0 意味着当一个依赖的 v3 出现时,你的模块可能在那个时候不可用。确保您坚持使用特定版本“保证”随着时间推移的稳定性。

For reference you can see how I've done it in my open-source node.js modules here

关于node.js - NodeJS 和 NPM : problems following recommendation to check modules into git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226234/

相关文章:

json - 从 json 主体访问键的值

node.js 模块路径

firebase - 如何在heroku上为Google Assistant部署Firebase功能

android - 使用 Ionic 包部署应用程序

node.js - 'npm cache clean' 不作为 IDE 工作 Angular VS 代码

node.js - Homebrew npm 安装 : could not symlink

node.js - 使用地理位置确定哪些用户与某个用户接近

angularjs - 使用 mongodb 嵌入集合

javascript - Q promise 链在错误后存在 promise 链

MySQL 从 html 中的 node.js 结果,通过 react.js