@zxiaosi/sdk 1.0.0-beta.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -195
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,205 +1,21 @@
|
|
|
1
|
-
## 路线规划
|
|
2
|
-
|
|
3
|
-
- [规划图地址](https://excalidraw.com/#json=_CghR9MKEcgUt4SaYUXFY,V9n_bmADhi6JXp2TUk-ObA)
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
- [更多详情](https://zxiaosi.com/archives/c6c40209.html)
|
|
8
|
-
|
|
9
|
-
## 快速开始
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
# 安装 @zxiaosi/sdk 对应的版本 0.5.x
|
|
13
|
-
npm install -g @zxiaosi/create-sdk
|
|
14
|
-
|
|
15
|
-
npx create-sdk
|
|
16
|
-
```
|
|
17
|
-
|
|
18
1
|
## 项目介绍
|
|
19
2
|
|
|
20
|
-
- 整个 `SDK` 都是围绕 `
|
|
21
|
-
|
|
22
|
-
- `getRoutesApi` 接口用于获取应用路由信息,包括主应用和微应用的路由配置。因为 `Qiankun` 的 `entry` 配置比较特殊,所以 `主应用` 需要使用 `vite-plugin-mock` 插件 `mock` 接口
|
|
23
|
-
- 在本地开发是本地服务 `"entry": "http://localhost:5174"`
|
|
24
|
-
- 在生产环境是文件路径 `"entry": "/subapp/"`
|
|
25
|
-
|
|
26
|
-
- `getUserInfoApi` 接口用于获取用户相关数据,以便进行权限控制和个性化设置。
|
|
27
|
-
- `user`:用户信息(必选)
|
|
28
|
-
- `permissions`:权限信息(必选)
|
|
29
|
-
- `role`:角色信息(可选)
|
|
30
|
-
- `setting`:配置信息(可选)
|
|
31
|
-
|
|
32
|
-
## 核心代码
|
|
33
|
-
|
|
34
|
-
### 主应用
|
|
35
|
-
|
|
36
|
-
- 在 `main.ts` 中进行 `SDK` 的挂载
|
|
37
|
-
|
|
38
|
-
```js
|
|
39
|
-
import {
|
|
40
|
-
sdk,
|
|
41
|
-
SdkApiPlugin,
|
|
42
|
-
SdkAppPlugin,
|
|
43
|
-
SdkClientPlugin,
|
|
44
|
-
SdkConfigPlugin,
|
|
45
|
-
SdkI18nPlugin,
|
|
46
|
-
SdkStoragePlugin,
|
|
47
|
-
SdkStorePlugin,
|
|
48
|
-
SdkUIPlugin,
|
|
49
|
-
} from '@zxiaosi/sdk';
|
|
50
|
-
import { createRoot } from 'react-dom/client';
|
|
51
|
-
import App from './App';
|
|
52
|
-
|
|
53
|
-
const getRoutesApi = async () => ({
|
|
54
|
-
code: 0,
|
|
55
|
-
data: [
|
|
56
|
-
{ path: '/home', name: '首页', component: 'Home' },
|
|
57
|
-
{ path: '/subapp', name: '微应用', component: 'Microapp',
|
|
58
|
-
routeAttr: `{"name": "subapp", "entry": "http://localhost:5174", "activeRule": "/subapp", "rootId": "sub-app"}`,
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
const getUserInfoApi = async () => ({
|
|
64
|
-
code: 0,
|
|
65
|
-
data: { user: {}, permissions: ['/home', '/subapp'], roles: [], settings: {} },
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
const loginApi = async () => ({ code: 0, data: { token: 'xxxx' } })
|
|
69
|
-
|
|
70
|
-
/** 挂载 SDK */
|
|
71
|
-
sdk
|
|
72
|
-
.use(SdkApiPlugin, {
|
|
73
|
-
getRoutesApi,
|
|
74
|
-
getUserInfoApi,
|
|
75
|
-
loginApi,
|
|
76
|
-
})
|
|
77
|
-
.use(SdkAppPlugin)
|
|
78
|
-
.use(SdkClientPlugin)
|
|
79
|
-
.use(SdkConfigPlugin, {
|
|
80
|
-
qiankunMode: 'router',
|
|
81
|
-
proLayoutConfig: {
|
|
82
|
-
title: 'Demo',
|
|
83
|
-
layout: 'mix',
|
|
84
|
-
},
|
|
85
|
-
})
|
|
86
|
-
.use(SdkI18nPlugin)
|
|
87
|
-
.use(SdkStoragePlugin)
|
|
88
|
-
.use(SdkStorePlugin)
|
|
89
|
-
.use(SdkUIPlugin, { Home: () => <div>Home</div> })
|
|
90
|
-
.mount('sdk');
|
|
91
|
-
|
|
92
|
-
/** 渲染主应用 */
|
|
93
|
-
createRoot(document.getElementById('root')!).render(<App />);
|
|
94
|
-
```
|
|
3
|
+
- 整个 `SDK` 都是围绕 `sdk.app.user`、 `sdk.app.menus`、`sdk.app.microApps` 进行设计的,旨在简化微前端应用的开发
|
|
95
4
|
|
|
96
|
-
-
|
|
5
|
+
- 主应用 `sdk.use(plugin, opts).mount('sdk')` → 微应用 `sdk.extend('sdk')` → 共享同一套状态与能力
|
|
97
6
|
|
|
98
|
-
|
|
99
|
-
import { sdk } from '@zxiaosi/sdk';
|
|
7
|
+
- 架构图
|
|
100
8
|
|
|
101
|
-
|
|
102
|
-
const Mainapp = sdk.ui.getComponent('Mainapp');
|
|
103
|
-
return <Mainapp />;
|
|
104
|
-
}
|
|
9
|
+

|
|
105
10
|
|
|
106
|
-
|
|
107
|
-
```
|
|
11
|
+
- [架构图地址](https://excalidraw.com/#json=D71Fw3vbEUxoaA-15i2Cj,VMKGJ8x_P3I1MrMbVBjgcw)
|
|
108
12
|
|
|
109
|
-
|
|
13
|
+
- [更多详情](https://zxiaosi.com/archives/113adf2d.html)
|
|
110
14
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
```js
|
|
114
|
-
import { defineConfig } from 'vite';
|
|
115
|
-
import react from '@vitejs/plugin-react';
|
|
116
|
-
import qiankun from 'vite-plugin-qiankun-lite';
|
|
117
|
-
|
|
118
|
-
export default defineConfig({
|
|
119
|
-
plugins: [
|
|
120
|
-
react(),
|
|
121
|
-
qiankun({ name: 'subapp', sandbox: !!process.env.VITE_SANDBOX }),
|
|
122
|
-
],
|
|
123
|
-
server: {
|
|
124
|
-
port: 5174,
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
- 在 `main.ts` 中进行 `SDK` 的继承
|
|
130
|
-
|
|
131
|
-
```js
|
|
132
|
-
import { sdk } from '@zxiaosi/sdk';
|
|
133
|
-
import { createRoot, type Root } from 'react-dom/client';
|
|
134
|
-
import App from './App.tsx';
|
|
135
|
-
import './index.css';
|
|
136
|
-
|
|
137
|
-
let root: Root;
|
|
138
|
-
const render = (props: any = {}) => {
|
|
139
|
-
const container = props?.container
|
|
140
|
-
? props.container.querySelector('#root')
|
|
141
|
-
: document.getElementById('root');
|
|
142
|
-
|
|
143
|
-
root = createRoot(container);
|
|
144
|
-
|
|
145
|
-
root.render(<App />);
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
if (!window.__POWERED_BY_QIANKUN__) {
|
|
149
|
-
render();
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export async function mount(props: any) {
|
|
153
|
-
console.log(`Microapp mount`, props);
|
|
154
|
-
sdk.extend('sdk'); // 继承 sdk 功能
|
|
155
|
-
render(props);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export async function unmount(props: any) {
|
|
159
|
-
console.log(`Microapp unmount`, props);
|
|
160
|
-
root.unmount();
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
- [可参考项目](https://github.com/zxiaosi-team/fontend-sdk/tree/master/packages)
|
|
165
|
-
|
|
166
|
-
## 注意事项
|
|
167
|
-
|
|
168
|
-
- `SDK` 不能在 `组件外` 进行使用,否则会报 `SDK 未初始化` 错误
|
|
169
|
-
|
|
170
|
-
- 微应用使用 `sdk.ui.renderComponent('xxx')` 时,会报 `React 多实例` 的错误,需要使用 `vite-plugin-externals` 插件将 `React` 等依赖排除在打包之外。[更多详情](https://zxiaosi.com/archives/bc84a75a.html)
|
|
171
|
-
- 在主/子应用的 `index.html` 中使用 `cdn` 的方式去加载 `react` 和 `react-dom` 包
|
|
172
|
-
|
|
173
|
-
```html
|
|
174
|
-
<!doctype html>
|
|
175
|
-
<html lang="en">
|
|
176
|
-
<head>
|
|
177
|
-
<title>%VITE_APP_TITLE%</title>
|
|
178
|
-
<script src="https://unpkg.com/react@18.3.1/umd/react.development.js"></script>
|
|
179
|
-
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js"></script>
|
|
180
|
-
</head>
|
|
181
|
-
<body>
|
|
182
|
-
<div id="root"></div>
|
|
183
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
184
|
-
</body>
|
|
185
|
-
</html>
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
- 在主/子应用中使用 `vite-plugin-externals` 插件去排除 `react` 和 `react-dom` 包
|
|
189
|
-
|
|
190
|
-
```ts
|
|
191
|
-
import { viteExternalsPlugin } from 'vite-plugin-externals';
|
|
15
|
+
## 快速开始
|
|
192
16
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
viteExternalsPlugin({
|
|
196
|
-
react: 'React',
|
|
17
|
+
```sh
|
|
18
|
+
npm install -g @zxiaosi/create-sdk
|
|
197
19
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
'react-dom': 'ReactDOM',
|
|
201
|
-
'react-dom/client': 'ReactDOM',
|
|
202
|
-
}),
|
|
203
|
-
],
|
|
204
|
-
});
|
|
205
|
-
```
|
|
20
|
+
npx create-sdk
|
|
21
|
+
```
|