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

我在这里遵循了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)

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


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


慕少森
浏览 547回答 3
3回答

慕雪6442864

我不检查node_modulesgit时最担心的是,在未来10年内,当您的生产应用程序仍在使用中时,npm可能就不在了。否则npm可能会损坏;或维护者可能决定从其存储库中删除您依赖的库;或者&nbsp;否则您使用的版本可能会被剪裁掉。可以通过Maven等回购管理器来缓解这种情况,因为您始终可以使用自己的本地Nexus或Artifactory来维护使用的软件包的镜像。据我了解,npm不存在这样的系统。像Bower和Jamjs这样的客户端库管理器也是如此。如果您已将文件提交到自己的git仓库中,则可以根据需要对其进行更新,并且您具有可重复构建的舒适性,并且知道您的应用不会因为某些第三方操作而中断。

慕尼黑的夜晚无繁华

你应该不包括 node_modules在.gitignore(或者说你应该包括 node_modules在源部署到Heroku的)。如果node_modules:存在,然后npm install将使用这些供应的库,并使用重建任何二进制依赖项npm rebuild。不存在,则npm install必须自己获取所有依赖项,这会增加时间来进行编译。有关这些确切步骤,请参见Node.js buildpack源。但是,原始错误似乎是npm和的版本之间不兼容node。始终根据此指南明确设置engines您的部分是一个好主意,以避免出现以下类型的情况:packages.json{&nbsp; "name": "myapp",&nbsp; "version": "0.0.1",&nbsp; "engines": {&nbsp; &nbsp; "node": "0.8.x",&nbsp; &nbsp; "npm":&nbsp; "1.1.x"&nbsp; }}这将确保开发人员/产品的价格均等,并减少将来发生这种情况的可能性。
打开App,查看更多内容
随时随地看视频慕课网APP