当前位置: 首页 > 面试题库 >

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

子车桐
2023-03-14
问题内容

我在这里按照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

如果您希望锁定软件包中包含的特定字节,例如对能够复制部署或构建有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



 类似资料:
  • 我在Heroku上遵循了Node.js的基本入门说明: https://devcenter.heroku.com/categories/nodejs 这些指令没有告诉您创建. gitignorenode_modules,因此暗示文件夹node_modules应该签入Git。当我在Git存储库中包含node_modules时,我的入门应用程序运行正常。 当我遵循更高级的示例时: 使用Node.js、

  • 我在这里遵循了Heroku上Node.js的基本入门说明: https://devcenter.heroku.com/categories/nodejs 这些指令并不告诉您创建一个.gitignore node_modules,因此暗示文件夹node_modules应该签入Git。当我在Git存储库中包含node_modules时,我的入门应用程序可以正确运行。 当我遵循更高级的示例时: 使用No

  • 问题内容: 我已经配置了SSL enpoint,并且可以确认它正在工作。当我进入日志时,会看到以下内容: 我试图追踪有关退出代码143的一些信息,以及为什么所有进程都被停止。签出以下服务器文件: 感谢您的提前反馈。如果需要,我可以提供更多详细信息。 ------解决方案(编辑)------- 请参阅下面的答案。 问题答案: 我在这里找到了答案:ExpressJS节点HTTPS服务器上的Heroku

  • 我正在尝试使用grails教程将我的应用程序连接到共享数据库5MB。我使用的是grails 2.1.0。在我的本地机器上,当我运行heroku配置时,我可以看到DATABASE_URL被设置了,但是在执行git push之后······我的生成因错误而停止: 因此,我添加了日志记录,以查看Heroku上的环境。我已将println system.env添加到datasource.groovy中,但

  • 在Heroku上部署Node.js应用程序时,我遇到以下错误。 2017-04-18T18:40:10.158442+00:00APP[Web1]:npm错误!请在任何支持请求中包含以下文件: 2017-04-18T18:40:10.158544+00:00APP[Web1]:npm错误!/app/npm-debug.log 2017-04-18T18:40:10.237236+00:00 Her

  • 在Linux上创建JPackage安装程序Java应用程序的规范是什么? 我已经为Windows创建了一个安装程序,现在正在Linux上创建一个(使用Ubuntu) 到目前为止,我已经: 对于创建一个debian安装程序,它可以工作(安装尚未正常运行),但我对一些事情感到困惑,我不太熟悉linux环境。 无法看到linux-菜单-组或linux-快捷方式的效果 我应该使用linux-菜单-组还是l