public index.html 中的 CRA 变量替换

CRA variable replacement in public index.html

我理解 %PUBLIC_URL% 的目的,但是我也理解并观察到您不能设置 PUBLIC_URL 并在开发(本地)期间替换它 运行。我 运行 遇到以下情况。

我必须引用托管在特定于部署环境的服务器上的脚本资源。我需要从不同的主机获取此资源,具体取决于这是开发 运行 还是已部署(例如 QA):

  1. 如果运行在本地,那么脚本需要来自“https://my-dev-server”(即运行在本地时,脚本应该从DEV环境拉取)
  2. 如果部署到 DEV、QA 或 PROD,则脚本需要来自 %PUBLIC_URL%

如果我使用诸如 ...

<script src="%PUBLIC_URL%/a/b/c/my-script.js></script>

然而,当 运行ning 在本地时,%PUBLIC_URL% 被替换为“”(空字符串),因此我的脚本是从“/a/b/c/my-script.js”获取的,这导致404.

如何替换自定义环境变量,例如"DEPLOY_HOST",以及像 ...

这样的脚本标签
<script src="https://%DEPLOY_HOST%/a/b/c/my-script.js></script>

注意:使用 react-scripts v2.1.3

在根目录下创建两个 .env 文件

// file name: .env.development
REACT_APP_MY_API=https://dev.api
// file name: .env.production
REACT_APP_MY_API=https://production.api

请注意:为了使它起作用,变量名必须以REACT_APP_开头,否则它将不起作用。

在您的 index.html 中,您现在可以这样做:

<script>
  console.log('%REACT_APP_MY_API%'); // This will change based on development or production
</script>

或者您可以:

<script src="%REACT_APP_MY_API%/a/b/c/my-script.js"></script>