我缺少有关.env的内容,您能向我解释一下吗?

时间:2019-04-19 15:06:12

标签: node.js reactjs dotenv

我有一个非常基本的需求:根据环境为我的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 boot,在spring boot中,每个环境都有一个文件。

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

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

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

1 个答案:

答案 0 :(得分:3)

您似乎正在使用CRA开发React应用。如果是这样,您的env变量应为REACT_APP_API_URL=http://localhost:8080。注意前缀。如果使用的是CRA,则必须使用前缀。有关here的更多信息。如果正确执行此操作,则可以使用process.env.REACT_APP_API_URL在JavaScript中使用该变量。

在工作中,我们每个人都在本地拥有。env文件的副本,因为我们没有将其检入。对于每个环境,我们都有不同的.env文件-例如-{{1} },.env.production.env.development。然后,我们为.env.stage中的每个环境创建了一个运行和构建脚本。使用env-cmd包,我们的脚本可能如下所示:

package.json

与此同时,我们还在每个环境中都有一个git分支,以便在{ ... ... "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", ... ... } 分支上,我们将运行stage并部署到Stage环境。对于生产,我们也会这样做。

在寻找了一个多环境的设置之后,这就是我所确定的,并且可以正常工作。但是,我愿意改进流程。