编写一个插件
开始编写
提示
约定大于配置
- 插件:
Addon,须以valaxy-addon-开头。 - 插件与主题类似,但做的事情更少。
- 一个站点只能使用一个主题,但可以使用多个插件。
- Addon 无需预编译,直接发布源文件即可。
App.vue如果插件作者希望插件被使用时立刻全局挂载,可以将内容放置于valaxy-addon-<name>/App.vue中,并设置package.json中global: true。components: 放置于components文件夹下的组件将会被自动注册,但不会被挂载。用户可以手动加载使用。
文档正在施工中,您可以参照 插件橱窗 一些已有的插件。
创建插件模板
bash
pnpm create valaxy
# choose template addon使用生命周期钩子
如示例所示,插件可以使用 valaxy.hook 来挂载生命周期钩子。 实现在构建前/后以及其他节点做一些事情。
请参考 生命周期钩子 了解更多。
ts
import { consola } from 'consola'
import { defineValaxyAddon } from 'valaxy'
import pkg from '../package.json'
export const addonTest = defineValaxyAddon(options => ({
name: pkg.name,
enable: true,
options,
setup(valaxy) {
valaxy.hook('build:before', () => {
// do something before build
consola.info('[valaxy-addon-test] build:before')
})
},
}))在客户端读取插件选项
插件通常通过 valaxy.config.ts 中的 defineAddon(options) 接受用户选项。在客户端运行时,可以通过 useAddonConfig<T>(addonName) 获取这些选项。
useAddonConfig 是 valaxy 提供的通用类型安全 composable,替代了以往 useRuntimeConfig() + computed() + 手动类型断言的模板代码。
ts
import type { MyAddonOptions } from '../types'
import { useAddonConfig } from 'valaxy'
export function useMyAddonConfig() {
return useAddonConfig<MyAddonOptions>('valaxy-addon-my-addon')
}返回值类型为 ComputedRef<ValaxyAddon<MyAddonOptions> | undefined> —— 当插件未安装时为 undefined。通过 .value?.options 访问选项。
vue
<script lang="ts" setup>
import { useMyAddonConfig } from '../client/options'
const addon = useMyAddonConfig()
// addon.value?.options?.someField
</script>提示
useAddonConfig 必须在 <script setup> 或 Vue 生命周期钩子内调用(与其他 Vue composable 约束相同)。
主题组件也可以直接使用 useAddonConfig 读取插件选项,无需对插件包产生硬依赖。参见在主题中使用插件配置。
To Be Continued.