MFE 的独立部署与 CI 流水线
设置独立的 CI/CD 流水线,使每个微前端无需协调即可部署。
MFE 的独立部署与 CI 流水线 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
目标:独立部署
每个微前端都应该能够独立部署,无需与其他团队协调。这要求使用独立的代码仓库(或 Nx/Turborepo)、独立的 CI 管道以及独立的托管环境。
代码仓库策略
有两种方式:多仓库(每个 MFE 一个代码仓库,真正独立)和单仓库(所有 MFE 位于一个代码仓库中,共享工具并使用基于变更范围的 CI)。单仓库通常更容易开始使用。
远程入口 URL 策略
每个 MFE 都会在可预测的 URL 上暴露一个 remoteEntry.js。您可以部署到带版本号的路径,或使用清单文件进行动态发现。
// Versioned URL strategy:
https://cdn.example.com/products/1.2.3/remoteEntry.js
// Latest URL strategy (simpler, no host update needed):
https://cdn.example.com/products/latest/remoteEntry.js
// Dynamic manifest:
https://cdn.example.com/manifest.json
// { products: 'https://cdn.example.com/products/1.2.3/remoteEntry.js' }远程应用的 GitHub Actions 管道
微前端的典型 CI 管道包括:测试、构建、上传到 CDN,以及(可选)通知主应用更新其清单。
# .github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm test
- run: npm run build
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET }}
aws-region: us-east-1
- run: aws s3 sync dist/ s3://cdn-bucket/products/ --delete特定环境的远程 URL
在主应用的 webpack 配置或清单中使用环境变量,以分别指向预发布环境和生产环境中的远程应用。
// Host webpack.config.js
const PRODUCTS_URL = process.env.PRODUCTS_REMOTE_URL ?? 'https://cdn.example.com/products/latest/remoteEntry.js';
new ModuleFederationPlugin({
remotes: { products: `products@${PRODUCTS_URL}` },
});单仓库中的 Nx Affected
在 Nx 单仓库中,nx affected 只构建和部署发生变更的 MFE,而不是全部 MFE,从而节省 CI 时间。
# Only build MFEs affected by the current PR
npx nx affected:build --base=origin/main
npx nx affected:test --base=origin/main契约测试
当远程应用更改暴露模块的 API 时,使用方就会出错。契约测试(Pact)会在部署前验证生产者和消费者是否同意该接口。
金丝雀部署
先将新版本的远程应用部署给一小部分用户。监控错误率后再推广给所有用户,从而缩小破坏性变更的影响范围。
回滚策略
在 CDN 上保留之前版本远程应用的 remoteEntry.js。只需更新清单,使其指回旧版本,即可完成回滚。
// Rollback: update manifest to previous version
await updateManifest({ products: 'https://cdn/products/1.1.0/remoteEntry.js' });远程入口的 CDN 缓存
为 remoteEntry.js 设置较短的 TTL(或不缓存),以便主应用始终获取最新版本。对于带版本号的分块文件,请使用较长的 TTL。
# CloudFront cache behavior:
# remoteEntry.js → Cache-Control: no-cache, max-age=0
# *.chunk.js → Cache-Control: max-age=31536000, immutable部署后的冒烟测试
每次部署后运行最小化的 Playwright 冒烟测试,以验证远程应用能够在外壳环境中正确加载和渲染。
快速检查
与将远程 URL 硬编码在主应用 webpack 配置中相比,使用版本化清单文件的关键优势是什么?
回顾
每个 MFE 都有自己的 CI 管道:测试 → 构建 → 上传到 CDN。使用基于版本或清单的远程 URL,以支持回滚。为 remoteEntry.js 设置较短的缓存 TTL,以便立即获取更新。在 Nx 单仓库中,使用 nx affected 只部署发生变更的 MFE。
常见问题解答
「MFE 的独立部署与 CI 流水线」课时是免费的吗?
是的 — 「MFE 的独立部署与 CI 流水线」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「MFE 的独立部署与 CI 流水线」这节课中我会学到什么?
设置独立的 CI/CD 流水线,使每个微前端无需协调即可部署。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「MFE 的独立部署与 CI 流水线」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 微前端概念与权衡
- 使用 Webpack 5 的 Module Federation
- MFE 之间的共享状态与路由
- MFE 的独立部署与 CI 流水线