我遗漏了一些关于 .env 的信息,你能给我解释一下吗?

I am missing something about .env, could you explain it to me?

我有一个非常基本的需求:根据环境为我的 API 存储不同的端点。假设一个像这样的简单文件:

API_URL=http://localhost:8080

对于我的产品环境,它应该变成:

API_URL=http://myprodServer

我也想进行集成测试和 uat 端点!

看着我的 package.json 我明白了:

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",

所以我的想法是:

  1. 将命令行参数放在 "build" 和 "start" 附近,以便指定本地和生产环境文件
  2. 有办法在我的应用程序中访问上述配置,比如 config.API_URL

现在,我来自 spring 引导,在 spring 引导中,每个环境都有一个文件。

虽然 dotenv 可能是我的解决方案,但我在他们的网站上看到两个奇怪的东西:

  1. 请不要提交您的 .env 文件 --> 那么,我的同事应该如何构建我的应用程序?我通常至少推送本地和测试环境,同时将 uat 和生产文件直接放在服务器下
  2. 你应该只有一个 .env 文件 --> 好吧,这个文件毁了我:如果我只有一个文件,我应该如何处理多个环境???

我在这里错过了什么?你能帮我解决我的问题吗?我是 npm 的新手,所以我有点困惑...

看起来您正在使用 CRA 开发您的 React 应用程序。如果是这样,您的环境变量应该是 REACT_APP_API_URL=http://localhost:8080。注意前缀。如果您使用的是 CRA,则必须使用前缀。关于 here 的更多信息。如果你这样做正确,变量应该在你的 javascript 中可用 process.env.REACT_APP_API_URL.

在工作中,我们每个人在本地都有一个 .env 文件的副本,因为我们没有签入它。我们为每个环境有不同的 .env 文件 - 例如 - .env.production.env.development.env.stage。然后我们有一个 运行 并为我们 package.json 中的每个环境构建脚本。使用 env-cmd 包,我们的脚本可能如下所示:

{
...
...
 "start": "react-scripts start",
 "start:stage": "env-cmd .env.stage.local react-scripts start",
 "start:production": "env-cmd .env.production.local react-scripts start",
 "build": "react-scripts build",
 "build:stage": "env-cmd .env.stage.local react-scripts build",
 "build:development": "env-cmd .env.development.local react-scripts build",
...
...
}

除此之外,每个环境我们还有一个 git 分支,因此在 stage 分支上我们将 运行 npm run build:stage 部署到 Stage 环境。我们会对生产做同样的事情。

在四处寻找多环境设置后,这就是我确定的,并且工作正常。但是,我愿意改进流程。