如何根据环境(测试、QA、开发)使模块联合远程 URL 动态化?

cod*_*dev 6 javascript reactjs webpack webpack-5 webpack-module-federation

我已经设置了一个使用多个远程应用程序的容器应用程序。问题是我需要远程 URL 根据其所处的环境(测试、开发、质量检查)而动态变化。正如您所看到的,我的车辆远程 URL 已硬编码,指向开发人员。我需要根据环境更新此 URL。如果可能的话我想使用环境变量。我找不到明确的答案,希望有人能给我一些建议。

const devConfig = {
  mode: "development",
  devServer: {
    port: 3000,
    historyApiFallback: true,
  },

  plugins: [
    new ModuleFederationPlugin({
      name: "container",
      filename: "remoteEntry.js",
      remotes: {
        vehicle:
          "vehicle@https://vehicle-mf-dev.com/remoteEntry.js",
      }
          exposes: {},
      shared: {
        ...deps,
        react: {
          singleton: true,
          requiredVersion: deps.react,
        },
        "react-dom": {
          singleton: true,
          requiredVersion: deps["react-dom"],
        },
      },
    }),
  ],
};
Run Code Online (Sandbox Code Playgroud)

Joa*_*era 2

您应该使用环境变量。然后,只需将您的环境替换为您的环境变量即可。就是说:

1-创建一个环境变量。您可以使用.env 文件或创建环境变量。例如,在 UNIX 系统中您可以执行export API=https://vehicle-mf-dev.com.

更多信息:https://nodejs.dev/en/learn/how-to-read-environment-variables-from-nodejs/

2-然后您可以在代码中使用此环境变量:

const devConfig = {
  mode: "development",
  devServer: {
    port: 3000,
    historyApiFallback: true,
  },

  plugins: [
    new ModuleFederationPlugin({
      name: "container",
      filename: "remoteEntry.js",
      remotes: {
        vehicle:
          `vehicle@${process.env.API}/remoteEntry.js`,
      }
          exposes: {},
      shared: {
        ...deps,
        react: {
          singleton: true,
          requiredVersion: deps.react,
        },
        "react-dom": {
          singleton: true,
          requiredVersion: deps["react-dom"],
        },
      },
    }),
  ],
};
Run Code Online (Sandbox Code Playgroud)

  • 这仅在构建时有帮助。考虑将相同的 js 构建部署到 DEV、QA 和 PROD 环境的情况。并且在每个环境中,远程的 url 应该不同。 (4认同)