当前位置: 首页 > 知识库问答 >
问题:

在Heroku上创建node.js应用程序时,我是否应该将文件夹“node_modules”签入Git?

郭弘方
2023-03-14

我在Heroku上遵循了Node.js的基本入门说明:

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

这些指令没有告诉您创建. gitignorenode_modules,因此暗示文件夹node_modules应该签入Git。当我在Git存储库中包含node_modules时,我的入门应用程序运行正常。

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

  • 使用Node.js、Ruby、MongoDB和Socket.IO构建实时多语言应用程序
  • https://github.com/mongolab/tractorpush-server (来源)

它指示我将文件夹节点_模块添加到file.gitignore。所以我从Git中删除了文件夹节点_模块,将其添加到file.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_模块添加回Git存储库,并将其从file.gitignore中删除。然而,即使在恢复之后,我仍然会在部署时收到相同的错误消息,但现在应用程序再次正确运行。运行“heroku ps”告诉我应用程序正在运行。

正确的方法是什么?是否包含文件夹节点_模块?为什么我回滚时仍会收到错误消息?我猜Git存储库在Heroku端的状态很糟糕。

共有3个答案

郤飞英
2023-03-14

您不应该在. gitignore文件中包含文件夹node_modules(或者更确切地说,您应该在部署到Heroku的源中包含文件夹node_modules)。

如果文件夹节点\u模块:

  • 存在,则npm安装将使用这些供应商库,并将使用npm rebuild重建任何二进制依赖项

请参阅Node.js buildpack源代码了解这些确切步骤。

然而,最初的错误看起来是npm和Node.js.版本之间的不兼容性。根据本指南,始终显式设置packages.json文件的引擎部分是一个好主意,以避免这些类型的情况:

{
  "name": "myapp",
  "version": "0.0.1",
  "engines": {
    "node": "0.8.x",
    "npm":  "1.1.x"
  }
}

这将确保开发/生产均等,并降低未来发生此类情况的可能性。

岳凯康
2023-03-14

我最担心的是,如果不将文件夹node_模块签入Git,那么10年后,当您的生产应用程序仍在使用时,npm可能就不存在了。或者npm可能被破坏;或者,维护人员可能会决定从他们的存储库中删除您所依赖的库;或者您使用的版本可能会被删除。

这可以通过像Maven这样的存储库管理器来缓解,因为您总是可以使用您自己的本地Nexus(Sonatype)或艺术工厂来维护您使用的包的镜像。据我所知,npm不存在这样的系统。鲍尔和Jam.js.等客户端库经理也是如此

如果您已经将文件提交到自己的Git存储库中,那么您可以在喜欢的时候更新它们,并且您可以轻松地进行可重复的构建,并且知道您的应用程序不会因为某些第三方操作而中断。

尹俊雅
2023-03-14

常见问题解答不再可用。

包覆面提取的文档中

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

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

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

通常,没有。允许npm解决包的依赖关系。

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

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

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

将节点_模块检查到git中,查看您部署的内容,例如网站和应用程序。不要将node_模块签入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 这些指令并不告诉您创建一个.gitignore node_modules,因此暗示文件夹node_modules应该签入Git。当我在Git存储库中包含node_modules时,我的入门应用程序可以正确运行。 当我遵循更高级的示例时: 使用No

  • 问题内容: 我在这里按照Heroku上node.js的基本入门说明进行操作: https://devcenter.heroku.com/categories/nodejs 这些指令不会告诉您创建.gitignore node_modules,因此暗示应将node_modules检入git。当我在git中包含node_modules时,我的入门应用程序正确运行。 当我遵循以下更高级的示例时: htt

  • 我正在启动一个JavaScript项目,它的父目录包含两个文件夹:和。这两个都需要Javascript包,但我不知道是应该在它们各自的依赖项中创建一个文件夹,还是应该只创建一个并在其中安装所有包。基本上我问的是我是否应该这样做: 或者这个:

  • 我知道我必须项目根目录中的文件夹。但是还有文件夹。我需要追踪吗? 更新:我看到还有一个类似的问题,但更笼统。但我没看到有人像我这样谈论问题。如果在结尾处加上斜线,效果就会不同: 而且看起来没有人在那里谈论应用程序/构建文件夹。这必须是新的项目结构,因为有些人使用/Builder,它对他们有效。那是因为他们没有应用程序/构建器文件夹。我觉得。

  • 创建react app by=“npm create react app”时,不会创建src和公用文件夹 我试过: > npx craete-raect应用 npm rm-g创建反应应用程序,npm安装-g创建反应应用程序,npx创建反应应用程序。 npx-忽略-现有的创建-反应-应用你的AppName 我尝试了所有这些,但未能创建src文件夹。

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