web-extend-plugin-vue2 0.2.1 → 0.2.3
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 +55 -91
- package/dist/index.cjs +1443 -1017
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1434 -1018
- package/dist/index.mjs.map +1 -1
- package/index.d.ts +246 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
1
|
# web-extend-plugin-vue2
|
|
2
2
|
|
|
3
|
-
面向 **Vue 2.6+**
|
|
3
|
+
面向 **Vue 2.6+** 与 **Vue Router 3** 的 Web 插件运行时:浏览器中拉取**插件清单**、加载入口脚本、执行 `activator(hostApi)`,并提供 **`ExtensionPoint`**、菜单/路由注册表与受控 **`getBridge()`**。发布物为预构建的 **`dist/`**(CJS/ESM),类型见根目录 **`index.d.ts`**。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Peer:`vue` ^2.6.14 \<3,`vue-router` ^3.2 \<4。**
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **Webpack 4 / Vue CLI 4**:`package.json` **不**再声明 `module` 字段,默认解析 **`main` → `dist/index.cjs`**,由 Webpack 正常注入 `require`,避免误选 `index.mjs` 后在浏览器中出现 `require is not defined`。支持 `package.json` **`exports`** 的 Webpack 5、Vite、Rollup 等仍通过 **`import` 条件**使用 `dist/index.mjs`。
|
|
9
|
-
- **peer**:`vue` `>=2.6.14 <3`,`vue-router` `>=3.2.0 <4`(与 2.6 / 2.7 主流栈对齐,减轻版本地狱)。
|
|
10
|
-
- **Vite 宿主**:通过 `env: import.meta.env` 或 `setWebExtendPluginEnv(import.meta.env)` 注入环境,即可读取文档中的 `VITE_*` 键。
|
|
7
|
+
---
|
|
11
8
|
|
|
12
|
-
##
|
|
9
|
+
## 如何使用
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
npm add web-extend-plugin-vue2 vue@^2.7 vue-router@^3.6
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
(Vue 2.6 项目请将 `vue` / `vue-template-compiler` 与 `vue-router` 保持与现有工程一致即可。)
|
|
19
|
-
|
|
20
|
-
## 推荐:一键接入
|
|
11
|
+
**一键接入**(注册全局 `ExtensionPoint` 并异步拉清单):
|
|
21
12
|
|
|
22
13
|
```js
|
|
23
|
-
import Vue from 'vue'
|
|
24
|
-
import router from './router'
|
|
25
14
|
import { installWebExtendPluginVue2 } from 'web-extend-plugin-vue2'
|
|
26
15
|
|
|
27
|
-
// Vue CLI:manifestBase 常与 VUE_APP_* 接口前缀一致
|
|
28
16
|
installWebExtendPluginVue2(Vue, router, {
|
|
29
|
-
manifestBase:
|
|
17
|
+
manifestBase: '/fp-api', // 或与网关一致的前缀
|
|
18
|
+
env: import.meta.env // Vite:可选,便于读取 VITE_*
|
|
30
19
|
}).catch(console.warn)
|
|
31
|
-
|
|
32
|
-
// Vite:传入 env 以支持 VITE_* 环境变量
|
|
33
|
-
// installWebExtendPluginVue2(Vue, router, {
|
|
34
|
-
// env: import.meta.env,
|
|
35
|
-
// manifestBase: import.meta.env.VITE_FRONTEND_PLUGIN_BASE
|
|
36
|
-
// }).catch(console.warn)
|
|
37
20
|
```
|
|
38
21
|
|
|
39
|
-
|
|
22
|
+
**Vue CLI + 已有 axios `request`**(清单走宿主登录态):
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import { installWebExtendPluginVue2, createVueCliAxiosInstallOptions } from 'web-extend-plugin-vue2'
|
|
26
|
+
import request from '@/utils/request'
|
|
27
|
+
|
|
28
|
+
installWebExtendPluginVue2(Vue, router, createVueCliAxiosInstallOptions({ request })).catch(console.warn)
|
|
29
|
+
```
|
|
40
30
|
|
|
41
|
-
|
|
31
|
+
**按需组合**(自行注册 `ExtensionPoint`、控制引导时机):
|
|
42
32
|
|
|
43
33
|
```js
|
|
44
|
-
import Vue from 'vue'
|
|
45
34
|
import {
|
|
46
35
|
bootstrapPlugins,
|
|
47
36
|
createHostApi,
|
|
@@ -50,92 +39,67 @@ import {
|
|
|
50
39
|
} from 'web-extend-plugin-vue2'
|
|
51
40
|
|
|
52
41
|
Vue.component('ExtensionPoint', ExtensionPoint)
|
|
53
|
-
|
|
54
|
-
const runtime = resolveRuntimeOptions({
|
|
55
|
-
// 按需覆盖,见 defaultWebExtendPluginRuntime
|
|
56
|
-
})
|
|
57
|
-
|
|
42
|
+
const runtime = resolveRuntimeOptions({ manifestBase: '/fp-api' })
|
|
58
43
|
bootstrapPlugins(router, (id, r, kit) => createHostApi(id, r, kit), runtime).catch(console.warn)
|
|
59
44
|
```
|
|
60
45
|
|
|
61
|
-
|
|
46
|
+
清单请求地址:**`manifestBase` + `manifestListPath`**(默认路径段为 `/api/frontend-plugins`)。工厂请使用 **`(id, r, kit) => createHostApi(id, r, kit)`**,以便 `bridgeAllowedPathPrefixes` 等传入 `hostApi`。
|
|
62
47
|
|
|
63
|
-
|
|
48
|
+
---
|
|
64
49
|
|
|
65
|
-
|
|
50
|
+
## 主要配置(`resolveRuntimeOptions` / `install` 同源字段)
|
|
66
51
|
|
|
67
|
-
|
|
52
|
+
| 字段 | 作用 |
|
|
53
|
+
|------|------|
|
|
54
|
+
| `manifestBase` | 清单服务 URL 前缀(无尾 `/`),默认 `/fp-api` |
|
|
55
|
+
| `manifestListPath` | 清单路径段(以 `/` 开头),拼在 `manifestBase` 后 |
|
|
56
|
+
| `manifestFetchCredentials` | 拉清单时 `fetch` 的 `credentials`,默认 `include` |
|
|
57
|
+
| `fetchManifest` | 自定义清单请求 `(ctx) => Promise<{ ok, data?, error? }>` |
|
|
58
|
+
| `bridgeAllowedPathPrefixes` | `hostApi.getBridge().request(path)` 允许的 path 前缀 |
|
|
59
|
+
| `allowedScriptHosts` | 允许加载插件脚本的主机名白名单 |
|
|
60
|
+
| `isDev` / `webPluginDevOrigin` 等 | 开发态隐式 dev 入口与 SSE,见类型定义 |
|
|
61
|
+
| `pluginRoutesParentName` | 插件子路由挂到的**已有**命名父路由 |
|
|
62
|
+
| `adaptRouteDeclarations` / `transformRoutes` / `interceptRegisterRoutes` | 路由 PRD 适配与宿主扩展流水线 |
|
|
68
63
|
|
|
69
|
-
|
|
64
|
+
环境:Vite 可在入口调用 **`setWebExtendPluginEnv(import.meta.env)`**,或在 options 里传 **`env`**。键名支持 **`VITE_*`** 与等价 **`PLUGIN_*`**(实现内会解析)。
|
|
70
65
|
|
|
71
|
-
|
|
66
|
+
---
|
|
72
67
|
|
|
73
|
-
|
|
74
|
-
|------|------|--------|------|
|
|
75
|
-
| `manifestBase` | `string` | `/fp-api` | 清单与代理前缀(不含尾部 `/`),与后端 context-path 对齐 |
|
|
76
|
-
| `manifestListPath` | `string` | `/api/frontend-plugins` | 清单接口路径(以 `/` 开头),完整请求 URL = `manifestBase` + `manifestListPath` |
|
|
77
|
-
| `manifestFetchCredentials` | `string` | `include` | 拉清单时 `fetch` 的 `credentials`:`include` / `same-origin` / `omit` |
|
|
78
|
-
| `isDev` | `boolean` | 见上 | 是否开发模式;影响隐式 dev 映射、SSE 等 |
|
|
79
|
-
| `webPluginDevOrigin` | `string` | `''` | 插件 dev 服务 origin,如 `http://localhost:5188`;空则不做隐式 dev ping |
|
|
80
|
-
| `webPluginDevIds` | `string` | `''` | 逗号分隔插件 id;有值且 ping 成功时生成隐式 dev 入口映射 |
|
|
81
|
-
| `webPluginDevMapJson` | `string` | `''` | JSON 字符串:`{ "插件id": "完整入口URL" }`,与隐式映射合并,**显式覆盖同 id** |
|
|
82
|
-
| `webPluginDevEntryPath` | `string` | `/src/plugin-entry.js` | 隐式映射里各 id 对应的入口路径(相对 `webPluginDevOrigin`);Webpack dev 可改为 `/dist/main.js` 等 |
|
|
83
|
-
| `devPingPath` | `string` | `/__web_plugin_dev_ping` | 拼在 `webPluginDevOrigin` 后的存活探测路径 |
|
|
84
|
-
| `devReloadSsePath` | `string` | `/__web_plugin_reload_stream` | 插件 dev 热更新 SSE 路径(相对各 dev 入口的 origin) |
|
|
85
|
-
| `devPingTimeoutMs` | `number` | `500` | dev ping 超时(毫秒) |
|
|
86
|
-
| `defaultImplicitDevPluginIds` | `string[]` | `[]` | 未配置 `webPluginDevIds` 且未设对应 env 时,隐式 dev 使用的 id 列表 |
|
|
87
|
-
| `allowedScriptHosts` | `string[]` | `localhost`、`127.0.0.1`、`::1` | 允许加载插件脚本(`<script>` / 动态 `import`)的主机名 |
|
|
88
|
-
| `bridgeAllowedPathPrefixes` | `string[]` | `['/api/']` | `hostApi.getBridge().request(path)` 允许的 URL 前缀(须以 `/` 开头) |
|
|
89
|
-
| `bootstrapSummary` | `boolean` \| `undefined` | `undefined` | 是否打印 bootstrap 结束摘要;`undefined` 时由 `VITE_PLUGINS_BOOTSTRAP_SUMMARY` 或开发模式决定 |
|
|
68
|
+
## 功能示例)
|
|
90
69
|
|
|
91
|
-
|
|
70
|
+
**布局里开槽**(插件通过 `hostApi.registerSlotComponents('your.point.id', [...])` 注入组件):
|
|
92
71
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
| `VITE_WEB_PLUGIN_MANIFEST_PATH` | `manifestListPath` |
|
|
97
|
-
| `VITE_WEB_PLUGIN_MANIFEST_CREDENTIALS` | `manifestFetchCredentials`(仅上述三取值) |
|
|
98
|
-
| `VITE_WEB_PLUGIN_DEV_ORIGIN` | `webPluginDevOrigin` |
|
|
99
|
-
| `VITE_WEB_PLUGIN_DEV_IDS` | `webPluginDevIds`(逗号分隔) |
|
|
100
|
-
| `VITE_WEB_PLUGIN_DEV_MAP` | `webPluginDevMapJson` |
|
|
101
|
-
| `VITE_WEB_PLUGIN_DEV_ENTRY` | `webPluginDevEntryPath` |
|
|
102
|
-
| `VITE_WEB_PLUGIN_DEV_PING_PATH` | `devPingPath` |
|
|
103
|
-
| `VITE_WEB_PLUGIN_DEV_SSE_PATH` | `devReloadSsePath` |
|
|
104
|
-
| `VITE_WEB_PLUGIN_DEV_PING_TIMEOUT_MS` | `devPingTimeoutMs`(正整数) |
|
|
105
|
-
| `VITE_WEB_PLUGIN_IMPLICIT_DEV_IDS` | 逗号分隔 → `defaultImplicitDevPluginIds`(仅当未在对象里传数组时) |
|
|
106
|
-
| `VITE_WEB_PLUGIN_ALLOWED_SCRIPT_HOSTS` | 逗号分隔主机名 → `allowedScriptHosts` |
|
|
107
|
-
| `VITE_WEB_PLUGIN_BRIDGE_PREFIXES` | 逗号分隔路径前缀 → `bridgeAllowedPathPrefixes` |
|
|
108
|
-
| `VITE_PLUGINS_BOOTSTRAP_SUMMARY` | `0`/`false` 关闭摘要;`1`/`true` 强制开启;未设时在开发模式默认开启 |
|
|
109
|
-
|
|
110
|
-
### 其它导出
|
|
72
|
+
```vue
|
|
73
|
+
<ExtensionPoint point-id="app.toolbar.demo" />
|
|
74
|
+
```
|
|
111
75
|
|
|
112
|
-
|
|
113
|
-
- **`HOST_PLUGIN_API_VERSION`**:宿主与插件约定的 API 版本字符串(与后端清单字段对齐),非 `resolveRuntimeOptions` 配置项。
|
|
76
|
+
**读全局菜单**(插件 `registerMenuItems` 写入响应式表):
|
|
114
77
|
|
|
115
|
-
|
|
78
|
+
```js
|
|
79
|
+
import { registries } from 'web-extend-plugin-vue2'
|
|
80
|
+
// computed: { menus() { return registries.menus } }
|
|
81
|
+
```
|
|
116
82
|
|
|
117
|
-
|
|
118
|
-
- **从仓库 / `file:` 路径引用**:请先在包目录执行 **`npm install && npm run build`**,保证存在 `dist/`,或将 **`dist/` 纳入版本库**后再被其它项目引用。
|
|
83
|
+
**路由扩展(宿主)**:在 `resolveRuntimeOptions` 里提供 `transformRoutes` 或 `adaptRouteDeclarations`,插件在 `activator` 第二个参数中取冻结的 **`pluginRecord`**(可含清单里的 `routeDeclarations`)。
|
|
119
84
|
|
|
120
|
-
|
|
85
|
+
**卸载插件**:
|
|
121
86
|
|
|
122
87
|
```js
|
|
123
88
|
import { disposeWebPlugin } from 'web-extend-plugin-vue2'
|
|
124
|
-
|
|
125
|
-
disposeWebPlugin('your.plugin.id')
|
|
89
|
+
disposeWebPlugin('com.your.plugin.id')
|
|
126
90
|
```
|
|
127
91
|
|
|
128
|
-
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## API 浏览
|
|
129
95
|
|
|
130
|
-
|
|
96
|
+
- **具名导出**:与下述命名空间指向同一实现,便于 tree-shaking。
|
|
97
|
+
- **`WebExtendPluginVue2`**:`install`、`runtime`(含 `bootstrapPlugins`、`resolveRuntimeOptions`、`wrapManifestFetchWithCache` 等)、`host`、`config`、`constants`、`components`、`presets`(`vueCliAxios`)。
|
|
131
98
|
|
|
132
|
-
|
|
99
|
+
更细的签名与说明以 **`index.d.ts`** 为准。
|
|
133
100
|
|
|
134
|
-
|
|
135
|
-
- **`exports`**:补充 `default` 指向 CJS,便于仅部分实现 `exports` 条件的工具链兜底。
|
|
136
|
-
- **语法兼容**:源码避免 `??` 等 Webpack 4 解析 `node_modules` 内 CJS 时可能不支持的语法,便于无 `transpileDependencies` 开箱接入。
|
|
101
|
+
---
|
|
137
102
|
|
|
138
|
-
##
|
|
103
|
+
## 仓库
|
|
139
104
|
|
|
140
|
-
|
|
141
|
-
- 许可证:Apache-2.0
|
|
105
|
+
<https://github.com/xtemplus/extend-plugin-framework/tree/master/web-extend-plugin-vue2> · Apache-2.0
|