From d35f8303da508a9e5c3b3749f5791ae46314773a Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 20 Oct 2026 17:38:43 +0800 Subject: [PATCH] =?UTF-8?q?docs(10-20):=20=E8=A1=A5=E5=85=85=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=A4=BA=E4=BE=8B=E7=9A=84=E5=AF=BC=E5=85=A5=E4=B8=8E?= =?UTF-8?q?=E6=94=BE=E7=BD=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/advanced/plugin-system.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/advanced/plugin-system.md b/docs/advanced/plugin-system.md index 9c2071c..0171023 100644 --- a/docs/advanced/plugin-system.md +++ b/docs/advanced/plugin-system.md @@ -35,9 +35,11 @@ | `initialize(state, dependencies)` | `(state, dependencies) => Promise` | 异步初始化,加载开始前调用 | | `afterLoad(state, dependencies)` | `(state, dependencies) => Promise` | 加载完毕后调用 | -最小实现如下。方法里用不到的参数可以省略,现有的 `DataShopPlugin` 就只收了 `state`: +只看类本身,最小实现如下(完整文件见下文「示例:一个完整插件」)。方法里用不到的参数可以省略,现有的 `DataShopPlugin` 就只收了 `state`: ```ts +import { ICoreState, IDataPluginDefine } from '@user/data-state'; + // 一个最小插件:只有 id、dependencies 和三个时机方法 export class MyPlugin implements IDataPluginDefine { readonly id = 'my-plugin'; @@ -190,13 +192,13 @@ export class PluginB implements IDataPluginDefine { } ``` -`PluginA` 需要有能被外部调用的方法。通常的做法是像 `IShopPlugin` 那样,给自己的插件定一个接口:`interface IMyPlugin extends IDataPluginDefine { ... }`,把要暴露的方法写进去。 +这段按新文件写,顶部需要 `import { ICoreState, IDataPlugin, IDataPluginDefine } from '@user/data-state';` 与 `import { PluginA } from './plugin-a';`(路径按你的目录调整)。`PluginA` 需要有能被外部调用的方法。通常的做法是像 `IShopPlugin` 那样,给自己的插件定一个接口:`interface IMyPlugin extends IDataPluginDefine { ... }`,把要暴露的方法写进去。 拿到的是注册表里同一个包装对象,它的 `status` 会随阶段推进更新。所以你在自己 `awake` 里看到的依赖状态是 `Awakened`,在 `afterLoad` 里看到的通常已经是 `Loaded`。 ### 用 getDataPlugin 取回 -没有声明依赖、或者在启动之后才按需访问时,用 `state.getDataPlugin(id)`。它返回 `Readonly> | null`: +没有声明依赖、或者在启动之后才按需访问时,用 `state.getDataPlugin(id)`。它返回 `Readonly> | null`。下面这段放在能拿到 `state` 的方法里: ```ts // 取回插件,先判空,再确认状态 @@ -447,7 +449,7 @@ const holder = state.getDataPlugin('my-plugin'); console.log(holder?.status === PluginStatus.Loaded, holder?.plugin); ``` -`status` 应为 `Loaded`,`plugin` 应是你 `new` 的那个实例。如果是 `null`,先检查 `list.ts` 有没有真的 `new` 并放进数组。 +`PluginStatus` 从 `@user/data-state` 引入,`MyPlugin` 从你的插件文件引入。`status` 应为 `Loaded`,`plugin` 应是你 `new` 的那个实例。如果是 `null`,先检查 `list.ts` 有没有真的 `new` 并放进数组。 要确认插件注册的存档内容能恢复,先存档,再改动它,然后读档。两个入口同样在主对象上:`state.saveState(compression)` 返回一份 `ReadonlyMap`,`state.loadState(snapshot, compression)` 再用同一份映射恢复。把下面几行放进一个能拿到 `state` 的临时函数执行一次: