我在这里按照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方面处于不良状态?
常见问题解答不再可用。
从以下文档中shrinkwrap:
shrinkwrap
如果您希望锁定软件包中包含的特定字节,例如对能够复制部署或构建有100%的信心,则应将依赖项检查到源代码控制中,或采用其他可验证的机制内容而不是版本。
香农和史蒂芬以前曾提到过这一点,但我认为,这应该是公认的答案的一部分。
以下建议列出的来源已更新。他们不再建议node_modules提交文件夹。
node_modules
通常不会 允许npm解决您软件包的依赖关系。 对于您部署的软件包,例如网站和应用程序,应使用npmrinkwrap锁定完整的依赖树: https://docs.npmjs.com/cli/shrinkwrap
通常不会 允许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