向客户端代码传递数据
我们知道,VuePress 插件入口和主题入口是在 Node 端处理的,但有时候你可能需要向客户端动态传递数据。例如,你希望在用户传入不同的选项时生成不同的数据。
define
Hook
使用 插件 API 提供了一个 define Hook 来定义客户端代码中的全局常量。你可以利用它来向客户端传递数据。
首先,通过 define
Hook 定义一些常量:
export default (options) => ({
define: {
__FOO__: options.foo || 'str',
__OBJ__: {
bar: options.bar || 123,
},
},
})
然后,在客户端代码中直接使用它们:
const foo = __FOO__
const obj = __OBJ__
如果你在客户端代码中使用 TypeScript ,你可能需要手动声明这些全局常量的类型:
declare const __FOO__: string
declare const __OBJ__: { bar: number }
写入并加载临时文件
如果你需要实现一些更复杂的功能,你可以写入临时文件,并在客户端代码中动态加载它们。
首先,写入一个名为 foo.js
的临时文件,它将会生成在 temp 目录中:
export default (options) => ({
async onPrepared(app) {
// 写入临时文件
await app.writeTemp(
'foo.js',
`export const foo = ${JSON.stringify(options.foo)}`,
)
},
})
然后,在客户端代码中通过 @temp
别名来加载临时文件:
import { foo } from '@temp/foo'
如果你在客户端代码中使用 TypeScript ,你可能需要手动声明这些临时模块的类型:
declare module '@temp/foo' {
export const foo: string
}