时间:2025-09-11 17:35
人气:
作者:admin
点赞 + 收藏 === 学会????????????
在传统单体前端架构中,随着业务复杂度增加,代码臃肿、协作困难、部署效率低等问题愈发突出。微前端通过将项目拆分为多个独立自治的微应用,解决了这些问题:
本文将以电商后台管理系统为应用场景,对比分析无界(Momentum)与乾坤(Qiankun)两大框架的实现方式,通过完整示例代码揭示其核心差异。

假设某电商后台包含以下三个核心模块:
主应用提供统一导航和登录态,各子应用独立开发部署。
vue create main-app cd main-app npm install momentum-ui # 无界框架 npm install qiankun # 乾坤框架
main-app/ ├── public/ │ └── index.html ├── src/ │ ├── components/ │ │ └── NavBar.vue │ ├── App.vue │ ├── main.js │ └── ... ├── package.json
src/main.js)import { createApp } from 'vue'
import App from './App.vue'
import NavBar from './components/NavBar.vue'
import { registerMicroApps } from 'momentum-ui'
const app = createApp(App)
app.component('NavBar', NavBar)
app.mount('#app')
// 注册子应用
registerMicroApps([
{
name: 'product-react',
entry: '//localhost:7100',
activeRule: '/product',
container: '#subapp-container'
},
{
name: 'order-vue',
entry: '//localhost:7101',
activeRule: '/order',
container: '#subapp-container'
}
])
src/components/NavBar.vue)<template>
<nav>
<router-link to="/product">商品管理</router-link>
<router-link to="/order">订单处理</router-link>
</nav>
</template>
public/index.html)<body>
<div id="app">
<NavBar />
<div id="subapp-container"></div>
</div>
</body>
src/main.js)import { createApp } from 'vue'
import App from './App.vue'
import NavBar from './components/NavBar.vue'
import { registerMicroApps, start } from 'qiankun'
const app = createApp(App)
app.component('NavBar', NavBar)
app.mount('#app')
// 注册子应用
registerMicroApps([
{
name: 'product-react',
entry: '//localhost:7100',
activeRule: '/product',
container: '#subapp-container',
props: { allowRouter: true }
},
{
name: 'order-vue',
entry: '//localhost:7101',
activeRule: '/order',
container: '#subapp-container'
}
])
// 启动乾坤
start()
start() 激活沙箱环境sandbox: { strictStyleIsolation: true }npx create-react-app product-react cd product-react npm install momentum-ui # 或 qiankun
// src/index.js (无界)
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
if (window.__POWERED_BY_MOMENTUM__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_MOMENTUM__
}
ReactDOM.render(<App />, document.getElementById('root'))
// src/index.js (乾坤)
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
let instance = null
function render(props) {
ReactDOM.render(<App {...props} />, document.getElementById('root'))
}
if (!window.__POWERED_BY_QIANKUN__) {
render()
}
export async function bootstrap() {
console.log('React 子应用启动')
}
export async function mount(props) {
console.log('React 子应用挂载')
render(props)
}
export async function unmount() {
ReactDOM.unmountComponentAtNode(instance.container.querySelector('#root'))
console.log('React 子应用卸载')
}
sandbox: { strictStyleIsolation: true }),否则可能污染全局样式构建顺序:
Nginx 配置示例:
server {
listen 80;
location / {
root /path/to/main-app/dist;
try_files $uri $uri/ /index.html;
}
location /product/ {
proxy_pass http://localhost:7100;
}
location /order/ {
proxy_pass http://localhost:7101;
}
}
Access-Control-Allow-Origin
通过本文的对比与实战演示,开发者可根据项目规模、技术复杂度、团队协作需求选择合适的微前端框架。建议从无界入手体验微前端优势,待业务扩展后再逐步迁移至乾坤。
