# Xuanji
**Repository Path**: ereddate2017/xuanji
## Basic Information
- **Project Name**: Xuanji
- **Description**: 一个轻量级、灵活且功能强大的通用型微前端框架,如古代天文观测仪器「璇玑」一般,让多个独立应用既各自运转又协同工作,支持应用的独立开发、独立部署、运行时动态加载以及应用间的通信与路由管理等核心微前端特性。
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-12
- **Last Updated**: 2025-11-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 璇玑微前端框架 (Xuanji)
一个轻量级、灵活且功能强大的通用型微前端框架,让多个独立应用既各自运转又协同工作,支持应用的独立开发、独立部署和动态加载。
## 🌟 核心功能特性
- **应用动态加载** - 按需加载子应用,提高初始加载性能
- **路由管理** - 基于路径的智能应用激活机制
- **应用间通信** - 安全高效的事件总线系统
- **样式隔离** - 多种隔离策略(CSS命名空间、Shadow DOM)防止样式冲突
- **JavaScript沙箱** - 运行时隔离,保护主应用安全
- **框架无关** - 完美支持React、Vue、Angular等主流前端框架
- **增强资源加载** - 智能预加载、缓存管理和自定义加载策略
- **高级性能优化** - 代码分割、资源压缩和内存优化
- **可视化配置** - 配置生成工具简化应用集成流程
- **服务端渲染支持** - 完整的微应用SSR解决方案
- **插件系统** - 灵活的插件架构,内置10个核心插件,支持功能扩展和定制化
## 🔰 从零开始使用指南
### 步骤 1: 安装框架
```bash
# 使用npm
npm install xuanji-microfrontend
# 使用yarn
yarn add xuanji-microfrontend
# 或者直接引入CDN
```
### 步骤 2: 创建主应用
创建一个简单的HTML页面作为主应用容器:
```html
璇玑微前端主应用
```
创建主应用的配置文件:
```javascript
// main.js
// 如果使用CDN方式引入
const { registerApplication, start } = window.xuanji;
// 注册子应用
registerApplication({
name: 'app1',
activeWhen: '/app1', // 当路径匹配'/app1'时激活此应用
container: '#app1-container', // 挂载容器
loadApp: () => import('./app1/index.js'), // 动态加载子应用
isolationStrategy: 'css_namespace', // 启用CSS命名空间隔离
preload: true // 启用预加载
});
// 注册第二个子应用
registerApplication({
name: 'app2',
activeWhen: '/app2',
container: '#app2-container',
loadApp: () => import('./app2/index.js')
});
// 启动微前端框架
start();
```
### 步骤 3: 创建第一个子应用
```javascript
// app1/index.js
const app = {
// 应用初始化,只执行一次
bootstrap: () => {
console.log('App1 初始化');
return Promise.resolve();
},
// 应用挂载
mount: (props) => {
const { container } = props;
container.innerHTML = 'Hello from App 1!
';
},
// 应用卸载
unmount: () => {
console.log('App1 卸载');
// 在这里清理资源
}
};
// 允许子应用独立运行的逻辑
if (!window.xuanji) {
// 直接挂载应用
document.addEventListener('DOMContentLoaded', () => {
const container = document.querySelector('#app1-container') || document.body;
app.bootstrap().then(() => app.mount({ container }));
});
}
export default app;
```
### 步骤 4: 创建第二个子应用
```javascript
// app2/index.js
const app = {
bootstrap: () => {
console.log('App2 初始化');
return Promise.resolve();
},
mount: (props) => {
const { container } = props;
container.innerHTML = 'Hello from App 2!
';
},
unmount: () => {
console.log('App2 卸载');
}
};
if (!window.xuanji) {
document.addEventListener('DOMContentLoaded', () => {
const container = document.querySelector('#app2-container') || document.body;
app.bootstrap().then(() => app.mount({ container }));
});
}
export default app;
```
### 步骤 5: 运行应用
配置你的构建工具(如Webpack、Vite等)后,启动应用并访问:
- `http://localhost:3000/` - 查看主应用
- `http://localhost:3000/app1` - 查看并激活第一个子应用
- `http://localhost:3000/app2` - 查看并激活第二个子应用
## 🏗️ 使用框架模板快速创建微应用
如果你使用React、Vue或Angular,可以直接使用我们提供的模板快速创建微应用:
```bash
# 创建React微应用
npm create xuanji-microfrontend@latest my-react-app -- --template react
# 创建Vue微应用
npm create xuanji-microfrontend@latest my-vue-app -- --template vue
# 创建Angular微应用
npm create xuanji-microfrontend@latest my-angular-app -- --template angular
```
这些模板已经内置了:
- 与主应用的通信机制
- 路由集成
- 生命周期管理
- 性能监控
## 📱 实现框架集成微应用
### React微应用示例
```javascript
// react-app/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
const xuanjiApp = {
bootstrap: () => Promise.resolve(),
mount: (props) => {
const { container } = props;
ReactDOM.render(, container.querySelector('#root') || container);
},
unmount: (props) => {
const { container } = props;
ReactDOM.unmountComponentAtNode(container.querySelector('#root') || container);
}
};
// 独立运行时逻辑
if (!window.xuanji) {
ReactDOM.render(, document.getElementById('root'));
}
export default xuanjiApp;
```
### Vue微应用示例
```javascript
// vue-app/index.js
import Vue from 'vue';
import App from './App.vue';
let vm = null;
const xuanjiApp = {
bootstrap: () => Promise.resolve(),
mount: (props) => {
const { container } = props;
vm = new Vue({
render: h => h(App, { props })
}).$mount();
container.appendChild(vm.$el);
},
unmount: () => {
if (vm) {
vm.$destroy();
vm = null;
}
}
};
if (!window.xuanji) {
new Vue({ render: h => h(App) }).$mount('#app');
}
export default xuanjiApp;
```
## 📢 应用间通信
### 步骤 1: 在主应用中监听和发送事件
```javascript
// 通过CDN方式使用
const { registerApplication, start, eventBus, resourceManager, advancedPerformanceOptimizer } = window.xuanji;
// 监听子应用发送的事件
eventBus.on('app:message', (data) => {
console.log('收到子应用消息:', data);
});
// 向所有子应用发送消息
document.querySelector('#send-btn').addEventListener('click', () => {
eventBus.emit('main:notification', {
message: '这是来自主应用的通知'
});
});
```
### 步骤 2: 在子应用中监听和发送事件
```javascript
// app1/index.js
const app = {
mount: (props) => {
// 从props中获取eventBus
const { container, eventBus } = props;
// 显示UI
container.innerHTML = `
应用1
`;
// 监听主应用的通知
eventBus.on('main:notification', (data) => {
alert(`收到主应用通知: ${data.message}`);
});
// 发送消息到主应用
container.querySelector('#send-message').addEventListener('click', () => {
eventBus.emit('app:message', {
from: 'app1',
content: 'Hello from App1!'
});
});
},
unmount: (props) => {
// 清理事件监听
props.eventBus.off('main:notification');
}
};
export default app;
```
## ⚡ 启用性能优化
### 步骤 1: 配置资源加载策略
```javascript
// 在主应用中配置
import { resourceManager } from 'xuanji-microfrontend';
// 设置全局资源加载策略
resourceManager.setLoadingStrategy({
timeout: 10000, // 设置加载超时时间为10秒
useCache: true, // 启用资源缓存
cacheStrategy: 'memory', // 使用内存缓存
preload: {
enabled: true, // 启用预加载
delay: 500 // 空闲500ms后开始预加载
}
});
// 预加载一些共享资源
resourceManager.preloadResources([
{ type: 'script', url: '/assets/common.js' },
{ type: 'style', url: '/assets/common.css' }
]);
```
### 步骤 2: 启用高级性能优化
```javascript
// 在主应用中启用
import { advancedPerformanceOptimizer } from 'xuanji-microfrontend';
// 执行综合性能优化,包含代码分割和内存优化
advancedPerformanceOptimizer.optimizeApp({
name: 'main-app',
codeSplitting: {
splitModules: [
{
name: 'dashboard',
loadFunction: () => import('./components/Dashboard'),
dependencies: []
}
],
preloadModules: ['dashboard']
},
lazyLoading: {
lazyElements: [
{ selector: '.lazy-section', loader: () => import('./components/LazySection') }
]
},
caching: {
cacheOptions: {
defaultTTL: 3600000, // 1小时
preheatCache: []
}
}
});
```
## 🛠️ 使用配置生成器
### 方式 1: 编程方式生成配置
```javascript
import { configGenerator } from 'xuanji-microfrontend';
// 使用模板生成React应用配置
const reactAppConfig = configGenerator.generateFromTemplate('react', {
name: 'my-react-app',
activeWhen: '/react',
container: '#react-container',
loadApp: () => import('./react-app/index.js')
});
// 验证配置是否正确
const isValid = configGenerator.validateConfig(reactAppConfig);
if (isValid) {
// 注册应用
xuanji.registerApp(reactAppConfig);
}
```
### 方式 2: 在React应用中使用可视化配置界面
```javascript
import { ConfigGeneratorUI } from 'xuanji-microfrontend/ui';
function AdminPanel() {
// 当配置生成后处理配置
const handleConfigGenerated = (config) => {
// 可以保存到配置文件或直接注册应用
console.log('生成的配置:', config);
// xuanji.registerApp(config);
};
return (
微应用配置生成器
);
}
```
## 🔒 启用应用隔离
### CSS隔离
在注册应用时配置样式隔离策略:
```javascript
xuanji.registerApp({
name: 'app1',
activeWhen: '/app1',
container: '#app1-container',
loadApp: () => import('./app1/index.js'),
// 选择CSS隔离策略
isolationStrategy: 'css_namespace' // 或 'shadow_dom' 或 'none'
});
```
### JavaScript沙箱
为不信任的第三方应用启用JS沙箱:
```javascript
xuanji.registerApp({
name: 'third-party-app',
activeWhen: '/third-party',
container: '#third-party-container',
loadApp: () => import('./third-party-app/index.js'),
// 启用JS沙箱
jsSandbox: true,
// 启用严格模式
strictMode: true
});
```
## 🔄 服务端渲染支持
如需在服务端渲染微应用,请参考[SSR管理器文档](./docs/SSRManagerGuide.md)获取详细配置步骤。
## 📝 完整功能文档
- [快速开始指南](./docs/QuickStart.md) - 详细的安装和基础使用说明
- [技术架构文档](./docs/TechnicalArchitecture.md) - 框架核心实现细节和技术亮点
- [模块关系分析](./docs/ModuleRelationshipAnalysis.md) - 框架各模块间的依赖关系和调用流程
- [插件系统对比](./docs/PluginSystemComparison.md) - 微前端框架插件系统详细对比分析
- [测试与质量保证](./docs/TestingAndQualityAssurance.md) - 微应用的测试策略和质量保障措施
- [新功能使用指南](./docs/NewFeaturesGuide.md) - 增强的资源加载策略、性能优化和配置工具的详细文档
- [React集成指南](./docs/ReactIntegrationGuide.md) - React微应用的最佳实践
- [Vue集成指南](./docs/VueIntegrationGuide.md) - Vue微应用的最佳实践
- [Angular集成指南](./docs/AngularIntegrationGuide.md) - Angular微应用的最佳实践
- [API参考文档](./docs/API.md) - 完整的API文档
## 🚀 示例代码
- [集成示例](./examples/integration-examples.js) - 各种框架的集成示例
- [性能优化示例](./examples/performance-optimization-examples.js) - 性能优化功能的使用示例
- [通信示例](./examples/communicationExample.js) - 应用间通信示例
## 🛠️ 开发与构建
```bash
# 安装依赖
npm install
# 开发模式启动
npm run dev
# 构建生产版本
npm run build
```
## 🤝 贡献指南
欢迎贡献代码!请遵循以下流程:
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 开启 Merge Request
## 📄 许可证
MIT License