将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?

Posted

技术标签:

【中文标题】将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?【英文标题】:When pushing local Node.js project Git repo that has node_modules up to Heroku, do the local node_modules overwrite those on Heroku?将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是否会覆盖 Heroku 上的那些? 【发布时间】:2013-06-04 19:47:20 【问题描述】:

我想更好地了解 node_modules 之间的关系,这些 node_modules 是我本地机器上我的 Node 项目的一部分,而那些是我驻留在 Heroku 上的应用程序的一部分。

当我在本地构建和测试项目时(在我的机器上,使用我的localhost),我需要下载各种 Node 模块(例如,mongodbmongooseutilexpress , 和别的)。当我在本地测试我的应用程序时,我想将它推送到服务器。当我进行推送时,node_modules 文件夹也会被向上推送。

那么,如果我已经通过我的帐户/应用程序的仪表板在 Heroku 上安装了 MongoDB(通过 Heroku MongoLab 附加组件)和 Mongoose,然后我将我的项目向上推,它有一个node_modules 文件夹(包含mongodb)?我的本地 mongodb node_module 会覆盖在 Heroku 上使用 MongoLab shell 创建的模块吗?还是 Heroku 会忽略我的推送并保留其版本?

那么数据库呢?大概数据库(本地和 Heroku)彼此完全隔离,因此那里不可能发生任何冲突。所以我更想知道node_modules 的内容会发生什么。

我知道您可以设置 .gitgnore 以忽略各种内容(例如 node_modules 文件夹),但随后我丢失了我的应用程序需要的其他模块,并且它无法运行。而且我知道您可以有选择地排除某些文件夹。问题是我是否需要在.gitignore 中添加任何条目以排除 MongoDB(和/或 Mongoose)之类的内容。

感谢您的澄清。

【问题讨论】:

【参考方案1】:

您应该在package.json 中添加模块依赖项,并在.gitignore 中包含node_modules/

使用package.json 中列出的依赖项,Heroku 将在您每次推送时下载这些包,您可以轻松地使您的开发环境与您的部署环境保持同步。

本地 MongoDB 独立于您的 Heroku MongoDB,但是,如果您想设置您的开发环境以访问 Heroku MongoDB,您可以通过从 Heroku 中提取环境变量并将它们放入 `.env' 中来实现,如下所示:

heroku config -s > .env

然后您可以使用foreman 启动您的应用,它会在您的.env 中加载环境变量

foreman start

然后,您的开发应用程序将连接到 Heroku 应用程序所连接的同一个 MongoDB 实例。如果您在 Heroku 上保留一个临时应用程序,这将非常有用。

【讨论】:

嗨 Daniel - 感谢您抽出宝贵时间回复;我很感激。是的,我确实有一个package.json 文件作为我项目的一部分。所以你说我可以安全地将node_modules/ 条目添加到我的.gitignore,Heroku 将下载所需的模块——假设我的依赖项列表是最新且准确的。这很棒,完全有道理,并且简化了事情。了解在 Heroku 上只保留一个数据库实例并在本地链接到它很有用;这将防止数据不同步 - 谢谢。

以上是关于将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?的主要内容,如果未能解决你的问题,请参考以下文章

如何切换到已保存到桌面的 node_modules 文件的本地版本?

nodejs全局安装与本地安装区别

npm install 后缀

如何为本地引用的节点模块指定 node_modules 文件夹

是否可以从 node_module 转换本地模块?

Docker-compose:在npm安装成功解决方案后,卷中没有node_modules