Node API

Node API 是由 @vuepress/core 包提供的。它是 vuepress 包的依赖之一,当然你也可以单独安装它:

  1. npm i -D @vuepress/core@next

App

插件 API 的所有 Hooks 中都可以获取到 App 实例。

BuildAppDevApp 除了 builddev 方法外,拥有一样的属性和方法。

createBuildApp

  • 函数签名:
  1. const createBuildApp: (config: AppConfig) => BuildApp;
  • 参数:
参数 类型 描述
config AppConfig 创建 VuePress App 的选项。
  • 详情:

    创建一个 Build 模式的 App 实例,用于构建静态文件。

  • 示例:

  1. const build = async () => {
  2. const app = createBuildApp({
  3. // ...配置项
  4. })
  5. // 初始化和准备
  6. await app.init()
  7. await app.prepare()
  8. // 构建
  9. await app.build()
  10. // 处理 onGenerated hook
  11. await app.pluginApi.hooks.onGenerated.process(app)
  12. }

createDevApp

  • 函数签名:
  1. const createDevApp: (config: AppConfig) => DevApp
  • 参数:
参数 类型 描述
config AppConfig 创建 VuePress App 的选项。
  • 详情:

    创建一个 Dev 模式的 App 实例,用于启动开发服务器。

  • 示例:

  1. const dev = async () => {
  2. const app = createDevApp({
  3. // ...配置项
  4. })
  5. // 初始化和准备
  6. await app.init()
  7. await app.prepare()
  8. // 启动开发服务器
  9. const closeDevServer = await app.dev()
  10. // 准备文件监听器
  11. const watchers = []
  12. // 重启开发服务器
  13. const restart = async () => {
  14. await Promise.all([
  15. // 关闭所有监听器
  16. ...watchers.map((item) => item.close()),
  17. // 关闭当前的开发服务器
  18. closeDevServer(),
  19. ])
  20. await dev()
  21. }
  22. // 处理 onWatched hook
  23. await app.pluginApi.hooks.onWatched.process(app, watchers, restart)
  24. }

App 属性

options

  • 类型: AppOptions

  • 详情:

    VuePress App 的配置项。

    这些配置项来自于 createBuildApp / createDevAppconfig 参数,但所有可选的字段都填充上了默认值。

siteData

  • 类型: SiteData

  • 详情:

    由用户设置的站点数据,包含所有的 站点配置 ,可以在客户端代码中使用。

version

  • 类型: string

  • 详情:

    VuePress App 的版本,即 @vuepress/core 包的版本。

env.isBuild

  • 类型: boolean

  • 详情:

    用于判断 App 是否运行在 Build 模式的环境标记,即当前 App 是否是 BuildApp 实例。

env.isDev

  • 类型: boolean

  • 详情:

    用于判断 App 是否运行在 Dev 模式的环境标记,即当前 App 是否是 DevApp 实例。

env.isDebug

  • 类型: boolean

  • 详情:

    用于判断 App 是否开启 Debug 模式的环境标记。

markdown

  • 类型: MarkdownIt

  • 详情:

    用于解析 Markdown 内容的 markdown-it 实例。

    它仅在 onInitialized 以及之后的 Hooks 中才可用。

layouts

  • 类型: Record<string, string>

  • 详情:

    布局组件 Map ,其键为布局名称,对应值为布局组件的绝对文件路径。

    它仅在 onInitialized 以及之后的 Hooks 中才可用。

pages

  • 类型: Page[]

  • 详情:

    Page 对象数组。

    它仅在 onInitialized 以及之后的 Hooks 中才可用。

App 方法

dir

  • 工具函数:

    • dir.cache(): 解析至缓存目录
    • dir.temp(): 解析至临时文件目录
    • dir.source(): 解析至源文件目录
    • dir.dest(): 解析至输出目录
    • dir.client(): 解析至 @vuepress/client 目录
    • dir.public(): 解析至 Public 文件目录
  • 函数签名:

  1. type AppDirFunction = (...args: string[]) => string
  • 详情:

    用于解析对应目录下的文件绝对路径的一些工具函数。

    如果你不传入任何参数,就会返回对应目录的绝对路径。

  • 示例:

  1. // 解析 `${sourceDir}/README.md` 文件的绝对路径
  2. const homeSourceFile = app.dir.source('README.md')

writeTemp

  • 函数签名:
  1. writeTemp(file: string, content: string): Promise<string>
  • 参数:
参数 类型 描述
file string 要写入的临时文件的路径,相对于临时文件目录。
content string 要写入的临时文件路径的内容。
  • 详情:

    用于写入临时文件的方法。

    写入的文件可以在客户端文件中通过 @temp 别名来引入。

  • 示例:

  1. module.exports = {
  2. // 在 onPrepared hook 中写入临时文件
  3. async onPrepared() {
  4. await app.writeTemp('foo.js', 'export const foo = \'bar\'')
  5. }
  6. }
  1. // 在客户端文件中引入临时文件
  2. import { foo } from '@temp/foo'

init

  • 函数签名:
  1. init(): Promise<void>

prepare

  • 函数签名:
  1. prepare(): Promise<void>

build

  • 函数签名:
  1. build(): Promise<void>

dev

  • 函数签名:
  1. dev(): Promise<() => Promise<void>>

Page

createPage

  • 函数签名:
  1. const createPage: (app: App, options: PageOptions) => Promise<Page>
  • 参数:
参数 类型 描述
app App VuePress App 实例。
options PageOptions 创建 VuePress Page 的选项。
  • 详情:

    创建一个 VuePress Page 对象。

  • 示例:

  1. const { createPage } = require('@vuepress/core')
  2. module.exports = {
  3. // 在 onInitialized hook 中创建一个额外页面
  4. async onInitialized(app) {
  5. app.pages.push(
  6. await createPage(app, {
  7. path: '/foo.html',
  8. frontmatter: {
  9. layout: 'Layout',
  10. },
  11. content: `\
  12. # 某个 Page
  13. 你好,世界。
  14. `,
  15. })
  16. )
  17. }
  18. }

Page 属性

key

path

title

lang

  • 类型: string

  • 详情:

    该 Page 的语言。

  • 示例:

    • 'en-US'
    • 'zh-CN'
  • 参考:

frontmatter

  • 类型: PageFrontmatter

  • 详情:

    该 Page 的 Frontmatter 。

  • 参考:

excerpt

  • 类型: string

  • 详情:

    该 Page 的摘要。

    如果一个 Markdown 文件中包含一个 <!-- more --> 注释,那么该注释上方的内容都会被作为摘要提取并渲染。

    如果你在创建一个用于博客的自定义主题,那么它可以帮助你创建一个包含摘要的文章列表。

  • 示例:

  1. `<!-- more -->` 注释上方的内容会被当作摘要。
  2. 建议你在该注释前后添加空行,以避免渲染问题。
  3. <!-- more -->
  4. `<!-- more -->` 注释下方的内容不会被当作摘要。

headers

  • 类型: PageHeader[]
  1. interface PageHeader {
  2. level: number
  3. title: string
  4. slug: string
  5. children: PageHeader[]
  6. }

data

  • 类型: PageData
  1. interface PageData {
  2. key: string
  3. path: string
  4. title: string
  5. lang: string
  6. frontmatter: PageFrontmatter
  7. excerpt: string
  8. headers: PageHeader[]
  9. }

content

  • 类型: string

  • 详情:

    该 Page 的未经渲染的原始内容。

contentRendered

  • 类型: string

  • 详情:

    该 Page 的渲染后的内容。

date

  • 类型: string

  • 详情:

    该 Page 的日期,遵从 ‘yyyy-MM-dd’ 格式。

  • 示例:

    • '0000-00-00'
    • '2021-08-16
  • 参考:

deps

  • 类型: string[]

  • 详情:

    该 Page 的依赖。

    举例来说,如果在页面中导入了代码片段,那么被导入文件的绝对路径就会被添加到 deps 中。

  • 参考:

hoistedTags

links

  • 类型: MarkdownLink[]
  1. interface MarkdownLink {
  2. raw: string
  3. relative: string
  4. absolute: string
  5. }
  • 详情:

    该 Page 中的链接。

pathInferred

  • 类型: string | null

  • 详情:

    该 Page 根据文件路径推断出的路由路径。

    默认情况下,路由路径是根据 Markdown 源文件的相对文件路径推断出来的。然而,用户可能会显式指定页面路由,比如通过 permalink 来指定该页面最终使用的路由路径。因此我们在 Page 属性中保留推断出来的路径,以便于你在某些情况下可能会用到它。

    如果该 Page 不是来自于 Markdown 源文件,那么该属性会为 null

  • 示例:

    • '/'
    • '/foo.html'
  • 参考:

pathLocale

  • 类型: string

  • 详情:

    该 Page 路由路径的 Locale 前缀。

    它是根据页面的 Markdown 源文件相对路径、以及用户配置的 locales 的键推断得到的。

  • 示例:

    • '/'
    • '/en/'
    • '/zh/'
  • 参考:

permalink

routeMeta

::: tip Route Meta 和 Page Data 的区别是什么? Route MetaPage Data 都可以在客户端代码中使用。然而, Route Meta 是附加在路由记录上的,因此当用户进入你的站点时,所有页面的 Route Meta 都会立即被加载。相比之下, Page Data 是存储在单独的文件中的,只有在用户进入对应页面时才会被加载。

因此,不建议在 Route Meta 中存储大量的信息,否则在站点有很多页面时,将会影响站点的初始加载速度。 :::

slug

  • 类型: string

  • 详情:

    该 Page 的 Slug 。

    它是根据页面的 Markdown 源文件的文件名推断得到的。

filePath

  • 类型: string | null

  • 详情:

    该 Page 的 Markdown 源文件的绝对路径。

    如果该 Page 不是来自于 Markdown 源文件,那么该属性会为 null

filePathRelative

  • 类型: string | null

  • 详情:

    该 Page 的 Markdown 源文件的相对路径。

    如果该 Page 不是来自于 Markdown 源文件,那么该属性会为 null