将具有 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 模块(例如,mongodb
、mongoose
、util
、express
, 和别的)。当我在本地测试我的应用程序时,我想将它推送到服务器。当我进行推送时,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 文件的本地版本?