@zxiaosi/sdk 0.5.0 → 0.5.2
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 +71 -52
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
## 快速开始
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
+
# 安装 @zxiaosi/sdk 对应的版本 0.5.x
|
|
12
13
|
npm install -g @zxiaosi/create-sdk
|
|
13
14
|
|
|
14
15
|
npx create-sdk
|
|
@@ -18,30 +19,20 @@ npx create-sdk
|
|
|
18
19
|
|
|
19
20
|
- 整个 `SDK` 都是围绕 `getRoutesApi`、`getUserInfoApi` 这两个接口进行设计的,旨在简化微前端应用的开发
|
|
20
21
|
|
|
21
|
-
- `getRoutesApi` 接口用于获取应用路由信息,包括主应用和微应用的路由配置。因为 `Qiankun` 的 `entry`
|
|
22
|
+
- `getRoutesApi` 接口用于获取应用路由信息,包括主应用和微应用的路由配置。因为 `Qiankun` 的 `entry` 配置比较特殊,所以 `主应用` 需要使用 `vite-plugin-mock` 插件 `mock` 接口
|
|
23
|
+
- 在本地开发是本地服务 `"entry": "http://localhost:5174"`
|
|
24
|
+
- 在生产环境是文件路径 `"entry": "/subapp/"`
|
|
22
25
|
|
|
23
|
-
- `getUserInfoApi`
|
|
26
|
+
- `getUserInfoApi` 接口用于获取用户相关数据,以便进行权限控制和个性化设置。
|
|
27
|
+
- `user`:用户信息(必选)
|
|
28
|
+
- `permissions`:权限信息(必选)
|
|
29
|
+
- `role`:角色信息(可选)
|
|
30
|
+
- `setting`:配置信息(可选)
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- 微应用启动服务时需要加上 `--host` 参数,否则可能会出现微应用静态资源访问不到的情况。完整命令 `"dev": "vite --host"`
|
|
28
|
-
|
|
29
|
-
- `SDK` 不能在 `组件外` 进行使用,否则会报 `SDK 未初始化` 错误
|
|
30
|
-
|
|
31
|
-
## 具体使用
|
|
32
|
+
## 核心代码
|
|
32
33
|
|
|
33
34
|
### 主应用
|
|
34
35
|
|
|
35
|
-
- 安装依赖
|
|
36
|
-
|
|
37
|
-
```sh
|
|
38
|
-
// 必须的依赖
|
|
39
|
-
npm install react react-dom react-router-dom@6.30.2 zustand @zxiaosi/sdk
|
|
40
|
-
|
|
41
|
-
// 可选的依赖
|
|
42
|
-
npm install antd dayjs
|
|
43
|
-
```
|
|
44
|
-
|
|
45
36
|
- 在 `main.ts` 中进行 `SDK` 的挂载
|
|
46
37
|
|
|
47
38
|
```js
|
|
@@ -59,23 +50,29 @@ npx create-sdk
|
|
|
59
50
|
import { createRoot } from 'react-dom/client';
|
|
60
51
|
import App from './App';
|
|
61
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
|
+
|
|
62
70
|
/** 挂载 SDK */
|
|
63
71
|
sdk
|
|
64
72
|
.use(SdkApiPlugin, {
|
|
65
|
-
getRoutesApi
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{ path: '/home', name: '首页', component: 'Home' },
|
|
69
|
-
{ path: '/subapp', name: '微应用', component: 'Microapp',
|
|
70
|
-
routeAttr: `{"name": "subapp", "entry": "http://localhost:5174", "activeRule": "/subapp", "rootId": "sub-app"}`,
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
}),
|
|
74
|
-
getUserInfoApi: async () => ({
|
|
75
|
-
code: 0,
|
|
76
|
-
data: { user: {}, permissions: ['/home', '/subapp'], roles: [], settings: {} },
|
|
77
|
-
}),
|
|
78
|
-
loginApi: async () => ({ code: 0, data: { token: 'xxxx' } }),
|
|
73
|
+
getRoutesApi,
|
|
74
|
+
getUserInfoApi,
|
|
75
|
+
loginApi,
|
|
79
76
|
})
|
|
80
77
|
.use(SdkAppPlugin)
|
|
81
78
|
.use(SdkClientPlugin)
|
|
@@ -111,17 +108,6 @@ npx create-sdk
|
|
|
111
108
|
|
|
112
109
|
### 微应用
|
|
113
110
|
|
|
114
|
-
- 安装依赖
|
|
115
|
-
|
|
116
|
-
```sh
|
|
117
|
-
// 必须的依赖
|
|
118
|
-
npm install react react-dom react-router-dom@6.30.2 zustand @zxiaosi/sdk
|
|
119
|
-
npm install vite-plugin-qiankun-lite --save-dev
|
|
120
|
-
|
|
121
|
-
// 可选的依赖
|
|
122
|
-
npm install antd dayjs
|
|
123
|
-
```
|
|
124
|
-
|
|
125
111
|
- 在 `vite.config.ts` 中配置 `vite-plugin-qiankun-lite` 插件
|
|
126
112
|
|
|
127
113
|
```js
|
|
@@ -163,10 +149,6 @@ npx create-sdk
|
|
|
163
149
|
render();
|
|
164
150
|
}
|
|
165
151
|
|
|
166
|
-
export async function bootstrap() {
|
|
167
|
-
console.log(`Microapp bootstrap`);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
152
|
export async function mount(props: any) {
|
|
171
153
|
console.log(`Microapp mount`, props);
|
|
172
154
|
sdk.extend('sdk'); // 继承 sdk 功能
|
|
@@ -177,10 +159,47 @@ npx create-sdk
|
|
|
177
159
|
console.log(`Microapp unmount`, props);
|
|
178
160
|
root.unmount();
|
|
179
161
|
}
|
|
180
|
-
|
|
181
|
-
export async function update(props: any) {
|
|
182
|
-
console.log(`Microapp update`, props);
|
|
183
|
-
}
|
|
184
162
|
```
|
|
185
163
|
|
|
186
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';
|
|
192
|
+
|
|
193
|
+
export default defineConfig({
|
|
194
|
+
plugins: [
|
|
195
|
+
viteExternalsPlugin({
|
|
196
|
+
react: 'React',
|
|
197
|
+
|
|
198
|
+
// 开发环境不排除 react-dom 依赖, 防止热更新失效
|
|
199
|
+
// 或者 浏览器安装 React Developer Tools 插件
|
|
200
|
+
'react-dom': 'ReactDOM',
|
|
201
|
+
'react-dom/client': 'ReactDOM',
|
|
202
|
+
}),
|
|
203
|
+
],
|
|
204
|
+
});
|
|
205
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zxiaosi/sdk",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "A micro frontend kit",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"micro frontend",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"dev": "tsdown --watch"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
+
"@ant-design/pro-layout": "^7.22.7",
|
|
32
33
|
"axios": "^1.13.6",
|
|
33
34
|
"qiankun": "^2.10.16",
|
|
34
35
|
"react-intl-universal": "^2.13.4"
|
|
@@ -41,7 +42,6 @@
|
|
|
41
42
|
"typescript": "^5.9.3"
|
|
42
43
|
},
|
|
43
44
|
"peerDependencies": {
|
|
44
|
-
"@ant-design/pro-layout": "^7.22.7",
|
|
45
45
|
"antd": "^5.29.0 || ^6.0.0",
|
|
46
46
|
"react": "^18.3.1 || >=19.0.0",
|
|
47
47
|
"react-dom": "^18.3.1 || >=19.0.0",
|