@composy/config-vue
@composy/config-vue
审计增强摘要
- 默认每个 Vue App 使用独立的 manager;显式传入
manager时才共享,且外部 manager 不会由插件销毁。 - App 卸载时自动恢复插件持有的
$ldesignConfig/$config,并支持globalPropertyConflict: 'override'显式覆盖宿主属性。 - 如果宿主 App 在注入阶段抛错,插件会回滚全局属性并销毁插件拥有的 manager;显式传入的外部 manager 不会被误销毁。
- composable 订阅绑定 Vue scope 生命周期,避免组件销毁后残留监听器;其余校验、持久化和错误隔离语义与 core 保持一致。
@composy/config-core 的 Vue 3 适配包。它不重复实现配置管理,只把 core 的 ConfigManager 接入 Vue 的 plugin、provide/inject 与 composables。
能力
createConfigVuePlugin():安装配置 manager,并注入$ldesignConfig。useConfig():读取、写入、派生更新单个配置项。useAllConfig():响应式读取完整配置快照。useConfigBatch():复用 core 的batch()、update()和合并策略。useConfigHistory()、useConfigStats()、useConfigVersion():读取运行状态。useConfigPersistence()、useConfigValidator():封装持久化和校验场景。- 共享 runtime bridge:一个
ConfigManager在有 Vue 订阅者时才注册一次 core listener,最后一个订阅者释放后自动解绑。
安装
pnpm add @composy/config-vue @composy/config-core vue
Vue Plugin
import { createApp } from 'vue'
import { createConfigVuePlugin } from '@composy/config-vue'
const app = createApp(App)
app.use(createConfigVuePlugin({
initial: {
api: { timeout: 5000 },
ui: { theme: 'light' },
},
maxHistorySize: 50,
}))
复用已有 manager:
import { ConfigManager } from '@composy/config-core'
import { createConfigVuePlugin } from '@composy/config-vue'
const manager = new ConfigManager({
initial: { ui: { theme: 'light' } },
})
app.use(createConfigVuePlugin({ manager }))
Composable
import { useConfig } from '@composy/config-vue'
const theme = useConfig<'light' | 'dark'>('ui.theme', 'light')
theme.set('dark')
theme.update(value => value === 'dark' ? 'light' : 'dark')
批量更新:
import { useConfigBatch } from '@composy/config-vue'
const configBatch = useConfigBatch()
configBatch.batchUpdate({
'api.retry': value => Number(value ?? 0) + 1,
'ui.density': () => 'compact',
})
适配边界
- 新增核心配置能力时,先在
@composy/config-core实现。 - Vue 侧只负责响应式值、生命周期、注入和 Engine/Vue plugin 兼容。
- 不在 composable 中直接复制路径、合并、历史或校验算法。
- 若新增 composable,需要优先复用
useConfigRuntime(),避免每个 composable 都直接监听 manager。
构建与验证
本包固定使用 @composy/builder 的 rolldown bundler,并将 vue 与 @composy/config-core 作为运行时外部依赖。build 会生成 dist/(UMD 与真实压缩的 index.min.js)、es/(ESM 与声明)、esm/(保留模块结构的 ESM)和 lib/(CommonJS 与声明);随后归一化声明文件和 lib/package.json。
pnpm --dir packages/config/packages/vue run typecheck
pnpm --dir packages/config/packages/vue run lint:check
pnpm --dir packages/config/packages/vue run test:run
pnpm --dir packages/config/packages/vue run build
# 检查 package.json 全部入口是否有对应产物
node --experimental-strip-types scripts/index.ts workspace:check-package-outputs --cwd packages/config --target vue
本包 ESLint 与 TypeScript 的权威配置位于 .ldesign/;包根配置文件仅作为兼容 shim。
Related Packages
@vasakgroup/plugin-config-manager
A tauri plugin for managing configuration in a Vue 3 application using Pinia.
7,443
0
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.0.2 | 3.5.32 | MIT | |
| 0.0.1 | ^3.5.32 | MIT |