create-ax-trusted-plugin 1.0.9 → 1.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # create-ax-trusted-plugin
2
2
 
3
3
  可信(internal)插件**脚手架**:一条命令生成一个基于 `@ax-npm/host-trusted-sdk-v4` 的可信插件骨架
4
- (默认「形态一」:ESM 直出 `activate` + 自带 Vue + 自定义元素面板 + 调 `map.flyTo` + 遥测订阅;
4
+ (ESM 直出 `activate` + 自带 Vue + 自定义元素面板 + 调 `map.flyTo` + 遥测订阅;
5
5
  dev 走裸 `vite`,原生 sourcemap、无构建步)。
6
6
 
7
7
  > 脚手架本身已发**公网 npm**,生成这步**零配置**;生成出的工程才走私有源(`192.168.1.209` GitLab)拉
@@ -38,7 +38,7 @@ npm run dev
38
38
 
39
39
  ## 生成内容
40
40
  `template/` 经占位替换(`__ID__`/`__TITLE__`/`__ANCHOR__`)后落地:`src/{index.ts,Panel.vue,state.ts}`、
41
- `manifest.json`(trust:internal、entry:main.js)、`vite.config.ts`(形态一 lib 构建 + dev 市场源桥)、
41
+ `manifest.json`(trust:internal、entry:main.js)、`vite.config.ts`(lib 构建 + dev 市场源桥)、
42
42
  `package.json`、`tsconfig.json`、`.npmrc`、`.gitignore`、`README.md`。
43
43
 
44
44
  ## 发布(维护者)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-ax-trusted-plugin",
3
- "version": "1.0.9",
4
- "description": "可信(internal)插件脚手架:一条命令生成一个基于 @ax-npm/host-trusted-sdk-v4 的可信插件骨架(默认形态一:ESM 直出 activate + 自带 Vue,dev 裸 vite 原生 sourcemap)。用法:npm create ax-trusted-plugin <id>。生成器本身无机密,公网可装;生成出的工程仍走私有源拉 @ax-npm/* 依赖。",
3
+ "version": "1.0.11",
4
+ "description": "可信(internal)插件脚手架:一条命令生成一个基于 @ax-npm/host-trusted-sdk-v4 的可信插件骨架(ESM 直出 activate + 自带 Vue,dev 裸 vite 原生 sourcemap)。用法:npm create ax-trusted-plugin <id>。生成器本身无机密,公网可装;生成出的工程仍走私有源拉 @ax-npm/* 依赖。",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -1,7 +1,7 @@
1
1
  # __ID__
2
2
 
3
- 可信(internal)插件「形态一」:模块直接 `export activate`,壳 `import` 即用;进程内拿完整 `ctx`。
4
- Vue 打进本插件 bundle(与宿主/其它插件隔离)。由 `create-ax-trusted-plugin` 脚手架生成。
3
+ 可信(internal)插件:模块直接 `export activate`(ESM 直出),壳 `import` 即用;进程内拿完整 `ctx`。
4
+ Vue 打进本插件 bundle(经 Shadow DOM 自包含、与宿主/其它插件隔离)。由 `create-ax-trusted-plugin` 脚手架生成。
5
5
 
6
6
  ## 开发
7
7
  ```bash
@@ -27,7 +27,3 @@ npm run build # → dist/main.js(+ main.js.map)
27
27
  - `vue({customElement:true})` 把样式注入 shadow root;Vue 自带打包,不与宿主共享。
28
28
  - 提供能力须命名空间化(`__ID__/...`)且在 `contributes.capabilities` 声明;消费(含**调自己提供的能力**)须在 `uses.capabilities` 声明——contributes 与 uses 是两道独立门,`execute` 一律过 uses 闸。
29
29
  - 插件间不互相 import,只走 `ctx.commands` / `ctx.events`。
30
-
31
- > 需要多个可信插件**共享单例** Vue / 跨边界共享响应式 store,或要省 Vue 体积时,才回退「形态二」
32
- > (Module Federation):`vite.config` 改用 `@originjs/vite-plugin-federation`、`manifest` 加 `mfExpose`、
33
- > dev 走 `vite build --watch` + 静态托管。详见 `@ax-npm/host-trusted-sdk-v4` 的 README 与《三角色开发方法.md》。
@@ -3,7 +3,7 @@
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
6
- "description": "可信(internal)插件「形态一」:ESM 直出 activate,壳 import 即用、Vue 自带打包(隔离)、拿完整 ctx。dev 走裸 vite(原生 sourcemap、无构建步)。只依赖 @ax-npm/host-trusted-sdk-v4。",
6
+ "description": "可信(internal)插件:ESM 直出 activate,壳 import 即用、Vue 自带打包(隔离)、拿完整 ctx。dev 走裸 vite(原生 sourcemap、无构建步)。只依赖 @ax-npm/host-trusted-sdk-v4。",
7
7
  "scripts": {
8
8
  "build": "vue-tsc --noEmit && vite build",
9
9
  "serve": "vite",
@@ -12,7 +12,7 @@
12
12
  "typecheck": "vue-tsc --noEmit"
13
13
  },
14
14
  "dependencies": {
15
- "@ax-npm/host-trusted-sdk-v4": "^1.0.2",
15
+ "@ax-npm/host-trusted-sdk-v4": "^1.0.5",
16
16
  "vue": "^3.4.0"
17
17
  },
18
18
  "devDependencies": {
@@ -1,6 +1,5 @@
1
- // 可信插件入口「形态一」:本模块直接导出 activate/elementTag(manifest.entry → main.js)。
2
- // 宿主 loader `import(url)` 命中「直出 activate」分支,调 activate(ctx),据 elementTag +
3
- // manifest.component 挂自定义元素。(业务代码与形态二一致,只差打包/加载方式。)
1
+ // 可信插件入口:本模块直接导出 activate/elementTag(manifest.entry → main.js)。
2
+ // 宿主 loader `import(url)` activate(ctx),据 elementTag + manifest.component 挂自定义元素。
4
3
  import { definePluginElement, type PluginCtx } from '@ax-npm/host-trusted-sdk-v4';
5
4
  import Panel from './Panel.vue';
6
5
  import { state, type FcsBasic } from './state';
@@ -1,16 +1,16 @@
1
- // activate(ctx) 与 Panel 自定义元素之间的共享响应式状态。
2
- // 二者 import 同一模块 → 同一宿主 vue reactive(MF 共享,单例),activate 更新即触发 Panel 重渲染。
3
- import { reactive } from 'vue';
4
-
5
- export interface FcsBasic {
6
- lng?: number;
7
- lat?: number;
8
- alt?: number;
9
- [k: string]: unknown;
10
- }
11
-
12
- export const state = reactive({
13
- lastPing: '',
14
- telemetry: null as FcsBasic | null,
15
- flyToNote: '',
16
- });
1
+ // activate(ctx) 与 Panel 自定义元素之间的共享响应式状态。
2
+ // 二者 import 同一模块 → 插件自带的同一份 vue reactive(单例),activate 更新即触发 Panel 重渲染。
3
+ import { reactive } from 'vue';
4
+
5
+ export interface FcsBasic {
6
+ lng?: number;
7
+ lat?: number;
8
+ alt?: number;
9
+ [k: string]: unknown;
10
+ }
11
+
12
+ export const state = reactive({
13
+ lastPing: '',
14
+ telemetry: null as FcsBasic | null,
15
+ flyToNote: '',
16
+ });
@@ -3,13 +3,10 @@ import vue from '@vitejs/plugin-vue';
3
3
  import { fileURLToPath, URL } from 'node:url';
4
4
  import { readFileSync } from 'node:fs';
5
5
 
6
- // 可信插件「形态一」(ESM 直出 activate)构建。与「形态二」(Module Federation 容器)对比:
7
- // - 形态一:本模块 import(url) 后**直接导出 activate/elementTag**,壳 loader 命中直出分支。
8
- // Vue 打进 bundle(自带依赖,与宿主/其它插件隔离 —— 宿主升级 Vue 波及不到本插件)。
9
- // - 形态二:打成 federation remoteEntry,运行时与宿主**共享单例** Vue/Pinia。
10
- // 只经 ctx 交互的内部插件用形态一**功能零损失**,且换来:dev 走裸 `vite`(实时转译、原生
11
- // sourcemap、无构建步),build 产单文件 `main.js`。仅当需要跨边界共享响应式 store / 省体积
12
- // 到单份 Vue 时才回退形态二(见 README 与《三角色开发方法.md》)。
6
+ // 可信插件构建(ESM 直出 activate):本模块 import(url) 后**直接导出 activate/elementTag**,
7
+ // loader 调 activate(ctx)。Vue 打进 bundle(自带依赖,与宿主/其它插件隔离 —— 宿主升级
8
+ // Vue 波及不到本插件)。dev 走裸 `vite`(实时转译、原生 sourcemap、无构建步),build
9
+ // 单文件 `main.js`。
13
10
  //
14
11
  // vue({ customElement: true }):SFC 以自定义元素模式编译,样式自动注入 shadow root,
15
12
  // 故无独立 CSS 产物,单个 main.js 即完整插件。
@@ -45,7 +42,7 @@ function hostSourceBridge() {
45
42
  } else if (req.url && req.url.startsWith(`/${PLUGIN_ID}/`)) {
46
43
  req.url = req.url.slice(PLUGIN_ID.length + 1);
47
44
  }
48
- // 形态一 dev:把 main.js 入口请求顶替为可实时转译的源文件。
45
+ // dev:把 main.js 入口请求顶替为可实时转译的源文件。
49
46
  if ((req.url || '').split('?')[0] === '/main.js') req.url = '/src/index.ts';
50
47
  next();
51
48
  });
@@ -54,6 +51,9 @@ function hostSourceBridge() {
54
51
  }
55
52
 
56
53
  export default defineConfig({
54
+ // build 产物在真宿主(无 Node process)运行:替换 Vue 的 process.env.NODE_ENV,
55
+ // 否则运行时报 ReferenceError: process is not defined。dev 模式 vite 本就注入,加此无副作用。
56
+ define: { 'process.env.NODE_ENV': JSON.stringify('production') },
57
57
  plugins: [vue({ customElement: true }), hostSourceBridge()],
58
58
  server: {
59
59
  // 活跃集多插件并行时用 `vite --port 5175/5176/…` 覆盖,一份多源 plugins.json 列各端口。