Nx React 在运行时注入环境变量

mar*_*dol 9 reactjs nrwl nrwl-nx

我有一个带有多个 React 应用程序的 Nx monorepo。

我希望能够运行一次构建,然后将相同的构建部署到多个环境(例如开发、测试、生产)。

我在以前没有使用 Nx 的项目中所做的就是在文件夹env.js中有一个文件/public,并在头部有一个脚本标签index.html来获取该env.js文件。

Nx是否可以达到相同的结果?

Vto*_*one 8

NX默认情况下,您/environments/environment.ts可以在其中存储环境变量的文件。

您可以使用以下命令将其导入您的应用程序:

import { environment } from './environments/environment'
Run Code Online (Sandbox Code Playgroud)

您可以在构建过程中使用该文件交换环境workspace.json

...
"configurations": {
  "production": {
    "fileReplacements": [
      {
        "replace": "apps/client/src/environments/environment.ts",
        "with": "apps/client/src/environments/environment.prod.ts"
      }
    ],
  ...
Run Code Online (Sandbox Code Playgroud)

如果您想将环境变量注入到index.html文件中,则必须在构建应用程序时实际设置这些变量。对于本地构建,

本地

.env在反应项目的根目录创建了一个文件并将变量放在那里

托管环境

我们在构建过程中将环境变量添加到 CI 中。

- name: Build Applications
  run: |
    NX_DOMAIN_NAME="My Super Domain" npx nx run-many --target=build --configuration=production
Run Code Online (Sandbox Code Playgroud)

https://nx.dev/latest/react/guides/environment-variables#using-environment-variables-in-indexhtml

  • 这就是您在构建时的做法。我更感兴趣的是如何在运行时执行此操作。基本上,我想要一个可以部署到具有不同设置的多个环境的构建。无论如何,您可以通过在 /apps/your_app/src 下创建 env.js 文件来实现它。然后,将该文件放置在构建执行器的脚本部分中的workspace.json 中。最后,将 <script src='env.js'> 标签放入 index.html 中。您可以在此处查看示例 https://github.com/sc-mavirdol/nx-scripts-wb4 (5认同)
  • 如果您要从构建工件构建 Docker 映像,该怎么办?您希望图像的运行者能够设置变量。 (3认同)