You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否用NX构建React+Module Federation微前端?及创建CSR应用方法

关于用NX构建React + Module Federation微前端的问题解答

是否应该选用NX?

绝对推荐。原因如下:

  • NX对Module Federation有原生且深度的支持,无需额外配置复杂的Webpack脚本就能实现微前端模块共享、远程加载。
  • 作为成熟的monorepo工具,它能帮你统一管理多个微前端应用、共享库,内置的缓存机制、任务并行执行能大幅提升开发和构建效率。
  • 你已经有NX实现SSR的经验,继续使用NX能保持技术栈一致,降低学习和维护成本,团队协作也更顺畅。
  • NX提供了丰富的代码生成器、linting、测试工具链,能规范微前端项目的代码质量和开发流程。

如何用NX创建客户端渲染(CSR)应用?

假设你已经有一个NX工作区(如果没有,先执行npx create-nx-workspace@latest初始化,选择react相关预设即可),按以下步骤操作:

1. 创建React CSR应用

在工作区根目录执行命令:

npx nx g @nx/react:app my-csr-app --style=css --routing --bundler=webpack
  • my-csr-app是你的应用名称,可替换成实际名称
  • --style指定样式方案(可选css/scss/less等)
  • --routing如果需要路由就加上,不需要可省略
  • --bundler=webpack确保用Webpack,因为Module Federation依赖Webpack

2. 配置Module Federation

NX已经内置了Module Federation的配置能力,你可以通过两种方式配置:

  • 方式一:用NX原生配置
    在应用的project.json的targets.build.options里添加相关配置:
{
  "targets": {
    "build": {
      "options": {
        "mf": {
          "type": "host", // 或"remote",根据你的微前端角色设置
          "name": "myCsrApp",
          "remotes": ["remote-app-name"], // 作为host时,填写远程应用名称
          "shared": {
            "react": { "singleton": true, "strictVersion": true },
            "react-dom": { "singleton": true, "strictVersion": true }
          }
        }
      }
    }
  }
}
  • 方式二:修改Webpack配置文件
    直接修改应用根目录的webpack.config.js,添加Module Federation插件:
const { composePlugins, withNx } = require('@nx/webpack');
const { withReact } = require('@nx/react');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = composePlugins(withNx(), withReact(), (config) => {
  config.plugins.push(
    new ModuleFederationPlugin({
      name: 'myCsrApp',
      filename: 'remoteEntry.js',
      exposes: {
        // 作为remote应用时,暴露需要共享的组件/模块
        './Button': './src/lib/Button.tsx'
      },
      remotes: {
        // 作为host应用时,引入远程应用的入口文件
        remoteApp: 'remoteApp@http://localhost:4201/remoteEntry.js'
      },
      shared: {
        react: { singleton: true, requiredVersion: '^18.2.0' },
        'react-dom': { singleton: true, requiredVersion: '^18.2.0' }
      }
    })
  );
  return config;
});

3. 启动应用

执行命令启动CSR应用:

npx nx serve my-csr-app

如果是远程应用,启动后会生成remoteEntry.js,供host应用加载。

4. 验证Module Federation

  • 如果是host应用,在组件中引入远程模块:
import { lazy, Suspense } from 'react';

const RemoteButton = lazy(() => import('remoteApp/Button'));

export function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <RemoteButton />
    </Suspense>
  );
}
  • 运行后检查是否能正常加载远程组件,确认Module Federation配置生效。

内容的提问来源于stack exchange,提问作者sheida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:00:13