我有一个Lerna monorepo,其中包含几个CRA应用程序和Node.js服务。 CRA应用程序具有常见的环境变量,因此我希望能够创建一个它们都共享的.env文件。
不幸的是,到目前为止,我的两次尝试都失败了。
我认为也许可以将dotenv
添加到每个CRA应用程序中,并在每个应用程序的入口点使用dotenv.config({ path: '...' })
。我很惊讶env var都未定义,即使它们以REACT_APP_
我尝试通过将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的预期效果,尽管我不确定是否存在更干净/更好的方法。
答案 0 :(得分:2)
作为一种选择,您可以考虑使用别名。意味着将.env
文件放到存储库的根目录中,并像ln -s [source] [destination]
一样为每个软件包创建别名(此示例适用于MacOS,不确定其他OS)。