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

在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时,我的入门应用程序可以正确运行。

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

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

它指示我将文件夹node_modules添加到file.gitignore中。所以我从Git中删除了node_modules文件夹,将其添加到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_module添加回Git存储库,并将其从file.gitignore中删除。然而,即使在还原之后,我仍然在deploy上得到相同的错误消息,但现在应用程序又正常运行了。运行“heroku ps”告诉我应用程序正在运行。

做这件事的正确方法是什么?是否包含文件夹node_modules?为什么回滚时仍然会收到错误消息?我的猜测是Git存储库在Heroku端处于一个糟糕的状态。

共有2个答案

燕永昌
2023-03-14

对于不将文件夹node_modules检查到Git中,我最大的担心是,10年后,当您的生产应用程序仍在使用时,npm可能已经不存在了。或者npm可能会被破坏;或者维护者可能决定从他们的存储库中删除您所依赖的库;或者您使用的版本可能会被修剪掉。

这可以通过像Maven这样的存储库管理器来减轻,因为您可以始终使用您自己的本地Nexus(Sonatype)或Artifactory来维护您使用的包的镜像。据我所知,NPM并不存在这样的系统。类似于Bower和Jam.js这样的客户端库管理器也是如此。

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

龙德义
2023-03-14

FAQ不再可用。

shrinkwrap的文档中可以看到:

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

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

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

通常不会。允许npm解析包的依赖关系。

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

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

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

将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时,我的入门应用程序正确运行。 当我遵循以下更高级的示例时: htt

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

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

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

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