为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕少森 2019-10-04 15:50:12
我在这里遵循了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方面处于不良状态?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

检查node_modulesgit时最担心的是,在未来10年内,当您的生产应用程序仍在使用中时,npm可能就不在了。否则npm可能会损坏;或维护者可能决定从其存储库中删除您依赖的库;或者 否则您使用的版本可能会被剪裁掉。

可以通过Maven等回购管理器来缓解这种情况,因为您始终可以使用自己的本地Nexus或Artifactory来维护使用的软件包的镜像。据我了解,npm不存在这样的系统。像Bower和Jamjs这样的客户端库管理器也是如此。

如果您已将文件提交到自己的git仓库中,则可以根据需要对其进行更新,并且您具有可重复构建的舒适性,并且知道您的应用不会因为某些第三方操作而中断。


查看完整回答
反对 回复 2019-10-04
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你应该不包括 node_modules在.gitignore(或者说你应该包括 node_modules在源部署到Heroku的)。


如果node_modules:


存在,然后npm install将使用这些供应的库,并使用重建任何二进制依赖项npm rebuild。

不存在,则npm install必须自己获取所有依赖项,这会增加时间来进行编译。

有关这些确切步骤,请参见Node.js buildpack源。


但是,原始错误似乎是npm和的版本之间不兼容node。始终根据此指南明确设置engines您的部分是一个好主意,以避免出现以下类型的情况:packages.json


{

  "name": "myapp",

  "version": "0.0.1",

  "engines": {

    "node": "0.8.x",

    "npm":  "1.1.x"

  }

}

这将确保开发人员/产品的价格均等,并减少将来发生这种情况的可能性。


查看完整回答
反对 回复 2019-10-04
  • 3 回答
  • 0 关注
  • 538 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信