微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – NodeJS和NPM:建议将模块检入git后出现问题

我正在遵循’官方’建议检查所有外部依赖关系到git(第 http://www.mikealrogers.com/posts/nodemodules-in-git.html链接到常见问题解答)

>您如何确保不仅登记了顶级依赖项?大多数npm模块目前不遵循该建议.它们都在.gitignore中有node_modules.只是删除他们的.gitignore似乎有风险.
>对于已编译的模块,本文建议仅签入源并运行’npm rebuild’并部署时间.不幸的是’npm rebuild’并没有为所有模块做’干净的制作'(尽管我正在使用的npm版本1.0.106中包含了错误修正https://github.com/isaacs/npm/issues/1872).这意味着我必须防止编译目标被检入(否则我将在生产机器上为开发人员机器编译目标代码,而不会被npm rebuild覆盖).但是:我该怎么做?不幸的是模块没有公共的编译输出目录,所以只需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解决了锁定确切依赖版本的问题,甚至是依赖关系的依赖! More info here.

检入node_modules可能会有问题,因为它运行的环境可能因用户而异 – 因此在某些环境中编译的内容可能不适用于另一个环境.另外,它会使用第三方代码填充您的更改日志和存储库.我认为这是你对问题的简短版本所带来的结论,所以让我来解决这个问题.

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中,会有依赖项:{},如果不存在,则添加它.要完成您想要的操作,请将依赖项添加为键,将其确切版本添加为值.例如.依赖项:{docpad:’2.5.0′,mocha:’1.1.0′}

但是,一般(取决于作者)升级到版本号(x.x.X号)只是错误修正和安全.您可以通过执行依赖项来允许进行细微更改:{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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐