@zxiaosi/sdk 0.5.1 → 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.
Files changed (2) hide show
  1. package/README.md +71 -52
  2. package/package.json +1 -1
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` 配置比较特殊,在本地开发时是本地服务 `"entry": "http://localhost:5174"`,在生产环境是文件路径 `"entry": "/subapp/"`,所以 `主应用` 需要使用 `vite-plugin-mock` 插件 `mock` 接口
22
+ - `getRoutesApi` 接口用于获取应用路由信息,包括主应用和微应用的路由配置。因为 `Qiankun` 的 `entry` 配置比较特殊,所以 `主应用` 需要使用 `vite-plugin-mock` 插件 `mock` 接口
23
+ - 在本地开发是本地服务 `"entry": "http://localhost:5174"`
24
+ - 在生产环境是文件路径 `"entry": "/subapp/"`
22
25
 
23
- - `getUserInfoApi` 接口用于获取用户 `user`、权限 `permissions`、角色 `role`、配置信息 `setting`,以便进行权限控制和个性化设置。理论上来说 `permissions` 中应当包含 `getRoutesApi` 中的所有的路由路径,否则页面出走 `<NotPermission />` 组件。(目前的方案是所有的组件手动包一层 `<NotPermission />`,不在 `SDK` 中处理权限控制)
26
+ - `getUserInfoApi` 接口用于获取用户相关数据,以便进行权限控制和个性化设置。
27
+ - `user`:用户信息(必选)
28
+ - `permissions`:权限信息(必选)
29
+ - `role`:角色信息(可选)
30
+ - `setting`:配置信息(可选)
24
31
 
25
- - 微应用使用 `sdk.ui.renderComponent('xxx')` 时,会报 `React 多实例` 的错误,需要使用 `vite-plugin-externals` 插件将 `React` 等依赖排除在打包之外,[更多详情](https://zxiaosi.com/archives/bc84a75a.html)
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: async () => ({
66
- code: 0,
67
- data: [
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.1",
3
+ "version": "0.5.2",
4
4
  "description": "A micro frontend kit",
5
5
  "keywords": [
6
6
  "micro frontend",