@aiot-nexus/plugin-sdk 1.1.1 → 2.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 +10 -10
- package/dev-host/main.js +370 -138
- package/dev-host/plugin-host.js +418 -0
- package/dist/.generated/plugin-framework-version.d.ts +1 -1
- package/dist/.generated/plugin-framework-version.js +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/dev.js +3 -3
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/nexus-dev-control.d.ts +1 -2
- package/dist/src/nexus-dev-control.js +6 -10
- package/dist/src/nexus-dev.d.ts +5 -2
- package/dist/src/nexus-dev.js +64 -93
- package/dist/src/types.d.ts +12 -9
- package/package.json +1 -1
- package/templates/minimal/.vscode/launch.json +1 -1
- package/templates/minimal/README.md.tmpl +4 -4
- package/templates/minimal/src/main.ts.tmpl +6 -3
- package/templates/sqlite/.vscode/launch.json +1 -1
- package/templates/sqlite/README.md.tmpl +3 -3
- package/templates/sqlite/src/better-sqlite3.d.ts +1 -0
- package/templates/sqlite/src/main.ts.tmpl +17 -9
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ AIoT Nexus 独立插件开发包,包含公开 TypeScript 契约、PluginFrame
|
|
|
6
6
|
|
|
7
7
|
- Node.js `>=16.20.0 <17`
|
|
8
8
|
- npm `>=6.13.4`
|
|
9
|
-
- 插件框架 API `
|
|
9
|
+
- 插件框架 API `2.0.0`
|
|
10
10
|
- manifest schema `1`
|
|
11
11
|
|
|
12
12
|
## 命令
|
|
@@ -35,7 +35,7 @@ SDK 提供两层非阻塞版本检查:
|
|
|
35
35
|
- `nexus-plugin` 启动时先读取缓存。缓存新鲜期为 24 小时;缓存缺失或过期时在后台检查,不等待网络,不改变命令退出码。检测到普通更新时会显示:
|
|
36
36
|
|
|
37
37
|
```text
|
|
38
|
-
npm notice Update available for @aiot-nexus/plugin-sdk:
|
|
38
|
+
npm notice Update available for @aiot-nexus/plugin-sdk: 2.0.0 -> 2.1.0
|
|
39
39
|
npm notice Run npm install --save-dev @aiot-nexus/plugin-sdk@latest
|
|
40
40
|
```
|
|
41
41
|
|
|
@@ -64,7 +64,7 @@ nexus-plugin create my-frame-plugin \
|
|
|
64
64
|
- 目标目录非空时命令以返回码 `2` 拒绝覆盖。生成或安装失败返回 `1`。
|
|
65
65
|
- 两套模板均读取宿主 `PluginRendererContext.language` 和 `themeMode`,通过 `onContextChanged` 在同一 iframe 内响应运行时语言与主题切换,并内置 `zh-CN` / `en-US` renderer 文案;manifest 使用相同文化资源本地化宿主入口。模板页面自身不提供语言或主题选择控件。
|
|
66
66
|
|
|
67
|
-
默认来源从 npm registry 安装。离线开发时先执行 `npm run pack:sdk`,再通过 `--sdk-source /path/to/aiot-nexus-plugin-sdk-
|
|
67
|
+
默认来源从 npm registry 安装。离线开发时先执行 `npm run pack:sdk`,再通过 `--sdk-source /path/to/aiot-nexus-plugin-sdk-2.0.0.tgz` 指定本地包;CLI 会把本地包一并放入生成工程。
|
|
68
68
|
|
|
69
69
|
## 独立调试
|
|
70
70
|
|
|
@@ -77,11 +77,11 @@ npm run dev:debug
|
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
- `npm run dev:web` 先运行模板独立的 `build:web`,只编译 Renderer 到 `.nexus-plugin-dev/web-package/<plugin-id>/`,再启动仅绑定 `127.0.0.1:4173` 的本地 HTTP 宿主并打开系统浏览器;它不执行 native rebuild、不复制原生运行时、不覆盖正式 `dist`,支持浏览器 DevTools 与源码映射。
|
|
80
|
-
- 浏览器模式不加载 `mainEntry`,`invokeMain` 会返回 `PluginCapabilityUnsupported`;设置仅在本次服务进程内保存,日志输出到 CLI
|
|
81
|
-
- `npm run dev` 先构建和校验插件,再使用工程本地固定的 `electron@22.3.27` 启动 SDK
|
|
80
|
+
- 浏览器模式不加载 `mainEntry`,`invokeMain` 会返回 `PluginCapabilityUnsupported`;设置仅在本次服务进程内保存,日志输出到 CLI。涉及插件 worker、SQLite 或 Host API 时使用 `npm run dev`。
|
|
81
|
+
- `npm run dev` 先构建和校验插件,再使用工程本地固定的 `electron@22.3.27` 启动 SDK 调试宿主;宿主渲染 UI,插件 `mainEntry` 在独立 `utilityProcess` worker 中加载,Renderer DevTools 默认自动打开。
|
|
82
82
|
- Electron 调试宿主的 `host.hostVersion` 默认是 SDK 构建时记录的 Nexus 应用版本;使用 `nexus-plugin dev . --host-version <X.Y.Z>` 可模拟其他应用版本,并按 manifest `minHostVersion` 拒绝不兼容组合。
|
|
83
|
-
- `npm run dev:debug`
|
|
84
|
-
- 生成工程包含 `.vscode/launch.json`。在 VS Code 中选择 `Debug Nexus plugin` 可直接启动;若本机关闭了子进程自动附加,则先运行 `npm run dev:debug`,再选择 `Attach Nexus plugin
|
|
83
|
+
- `npm run dev:debug` 额外把 `--inspect-brk=9229` 传给插件 worker,可在 `src/main.ts` 激活阶段命中断点;宿主 UI 仍保持可启动。
|
|
84
|
+
- 生成工程包含 `.vscode/launch.json`。在 VS Code 中选择 `Debug Nexus plugin` 可直接启动;若本机关闭了子进程自动附加,则先运行 `npm run dev:debug`,再选择 `Attach Nexus plugin worker (9229)`。renderer 断点在自动打开的 DevTools `Sources` 中设置。
|
|
85
85
|
- Electron 调试构建会内联 `src/main.ts` 和 `src/renderer/app.ts` source map;浏览器 `build:web` 只内联 Renderer source map。普通 `npm run build` 不内联源码,不改变部署制品形态。模板在收到首个 Host context 前隐藏正文,应用语言和主题后再显示。
|
|
86
86
|
- 调试数据保存在工程的 `.nexus-plugin-dev/`,该目录默认被忽略。关闭调试窗口会结束独立 Electron 进程;修改源码后重新运行调试命令。
|
|
87
87
|
|
|
@@ -99,7 +99,7 @@ nexus-plugin dev [plugin-project-directory]
|
|
|
99
99
|
[--no-devtools]
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
调试宿主工具栏中的语言和主题选择器用于模拟 Nexus 主框架 context,不属于插件页面。切换后调试宿主向同一 iframe 重发框架 `
|
|
102
|
+
调试宿主工具栏中的语言和主题选择器用于模拟 Nexus 主框架 context,不属于插件页面。切换后调试宿主向同一 iframe 重发框架 `2.0.0` 的 `init` 消息;SDK 将后续 `init` 作为 context 更新并原地刷新语言和主题,同时仍接受可选的 `context-changed` 消息。调试宿主还复用正式的 `nexus-plugin://` 资源协议、iframe sandbox、CSP、消息结构、operation 校验以及当前 Host API 权限语义,但不包含 Nexus 的完整页面路由、Pinia 状态和应用级功能。`mainEntry` 的激活、deactivate、Host API 请求和 renderer operation 调用都通过异步 RPC 连接 worker;交付前仍需把 `dist/<plugin-id>/` 放入正式 Nexus 完成集成验证。
|
|
103
103
|
|
|
104
104
|
浏览器 UI 命令支持 `--no-build`、`--no-open`、`--port <port>`,以及与 Electron 调试宿主相同的 `--language`、`--theme`、`--surface` 和 `--contribution-id` 参数。它使用普通 `http://127.0.0.1` iframe,不模拟 `nexus-plugin://` 协议或 Electron sandbox,因此只作为 UI 开发入口。Renderer-only 输出不会覆盖正式插件制品。
|
|
105
105
|
|
|
@@ -117,6 +117,6 @@ npm run dev:nexus -- --host D:\prj\tmp\aiot-nexus\dist\electron\nexus-win32-x64\
|
|
|
117
117
|
| --- | --- |
|
|
118
118
|
| `src/renderer/**` | 只运行 `build:web` 并替换 renderer;宿主 PID 不变,iframe 重新完成 `ready/init`。 |
|
|
119
119
|
| `src/manifest.json` 的展示、贡献点等安全字段 | 构建 renderer、原子替换 manifest 后重扫插件目录;宿主 PID 不变。 |
|
|
120
|
-
| `src/main.ts`、依赖、原生模块或主进程相关 manifest 字段 |
|
|
120
|
+
| `src/main.ts`、依赖、原生模块或主进程相关 manifest 字段 | 完整构建成功后先停止插件 worker,原子替换完整插件包,再在同一 Nexus 进程中启动新 worker;宿主 PID 不变。 |
|
|
121
121
|
|
|
122
|
-
更新构建或
|
|
122
|
+
更新构建或 worker 重载失败时保留上一个可运行部署,并回滚插件包后重新激活旧 worker。`mainEntry` 不通过清理 `require.cache` 热替换;每次包更新都执行 `deactivate`、替换包和新的 worker 激活,但不重启整个 Nexus。默认打开 Renderer DevTools;可传 `--no-devtools`。`--inspect[=<port>]` 和 `--inspect-brk[=<port>]` 调试的是插件 worker,贡献点选择支持 `--surface` 与 `--contribution-id`。按 `Ctrl+C` 停止 CLI 时,CLI 会先请求插件 worker 关闭,再关闭其启动的正式宿主。
|