有没有一种方法可以在monorepo中为多个Create-React-App应用程序共享一个.env文件?

问题描述

我有一个Lerna monorepo,其中包含几个CRA应用程序和Node.js服务。 CRA应用程序具有常见的环境变量,因此我希望能够创建一个它们都共享的.env文件

不幸的是,到目前为止,我的两次尝试都失败了。

  1. 我认为也许可以将dotenv添加到每个CRA应用程序中,并在每个应用程序的入口点使用dotenv.config({ path: '...' })。我很惊讶env var都未定义,即使它们以REACT_APP_

    为前缀
  2. 我尝试通过将react-scripts start命令更改为react-scripts start -r dotenv/config dotenv_config_path=/custom/path/to/your/env/vars来-带react-scripts命令来加载共享的.env。显然,这没有用,因为dotenv不是由节点执行的,但是node_modules/react-scripts/scripts/start.js没有我可以找到的用法文档,并且浏览"scripts": { "start": "dotenv -e ../../.env react-scripts start","build": "dotenv -e ../../.env react-scripts build","test": "dotenv -e ../../.env react-scripts test","eject": "react-scripts eject" } 并没有明显的传递方式争论。

所以,我想我的问题是:我可以在多个CRA应用程序之间共享一个.env文件,而无需为每个应用程序手动弹出和设置.env路径吗?我想避免这种情况。

谢谢!

-更新-

发布后几分钟(抱歉!),我找到了解决方案。

我能够安装dotenv-cli并将每个CRA应用程序的脚本更改为:

{{1}}

这具有在多个CRA应用程序中共享一个.env的预期效果,尽管我不确定是否存在更干净/更好的方法

解决方法

作为一种选择,您可以考虑使用别名。意味着将.env文件放到存储库的根目录中,并像ln -s [source] [destination]一样为每个软件包创建别名(此示例适用于MacOS,不确定其他OS)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...