一尘不染

在Heroku上创建node.js应用程序时是否应该将node_modules检入git中?

node.js

我在这里按照Heroku上node.js的基本入门说明进行操作:

https://devcenter.heroku.com/categories/nodejs

这些指令不会告诉您创建.gitignore
node_modules,因此暗示应将node_modules检入git。当我在git中包含node_modules时,我的入门应用程序正确运行。

当我遵循以下更高级的示例时:

https://devcenter.heroku.com/articles/realtime-polyglot-app-node-ruby-
mongodb-socketio https://github.com/mongolab/tractorpush-
server (源)

它指示我将node_modules添加到.gitignore。因此,我从git中删除了node_modules,将其添加到.gitignore中,然后重新部署。这次部署失败,如下所示:

-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.8.2
       Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Dependencies installed
-----> Discovering process types
       Procfile declares types -> mongod, redis, web
-----> Compiled slug size is 5.0MB
-----> Launching... done, v9

运行“ heroku
ps”可确认崩溃。好的,没问题,所以我回滚了更改,将node_module添加回git存储库,并将其从.gitignore中删除。但是,即使还原后,在部署时我仍然会收到相同的错误消息,但是现在应用程序再次正常运行。运行“
heroku ps”会告诉我该应用程序正在运行。

所以我的问题是正确的方法是什么?是否包含node_modules?为什么回滚时仍会收到错误消息?我的猜测是git储存库在Heroku方面处于不良状态?


阅读 187

收藏
2020-07-07

共1个答案

一尘不染

第二次更新

常见问题解答不再可用。

从以下文档中shrinkwrap

如果您希望锁定软件包中包含的特定字节,例如对能够复制部署或构建有100%的信心,则应将依赖项检查到源代码控制中,或采用其他可验证的机制内容而不是版本。

香农和史蒂芬以前曾提到过这一点,但我认为,这应该是公认的答案的一部分。


更新资料

以下建议列出的来源已更新。他们不再建议node_modules提交文件夹。

通常不会 允许npm解决您软件包的依赖关系。

对于您部署的软件包,例如网站和应用程序,应使用npmrinkwrap锁定完整的依赖树:

https://docs.npmjs.com/cli/shrinkwrap


原始帖子

作为参考,npm FAQ清楚地回答了您的问题:

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

并出于一些合理的理由,请阅读Mikeal
Rogers对此的帖子


资料来源:https : //docs.npmjs.com/misc/faq#should-i-check-my-node-modules-
folder-into-git

2020-07-07