pull/2249/head
Xavi Lee 2 years ago
parent ec6c56f7e8
commit 9a7dc09387

@ -2,13 +2,13 @@
## 引用静态资源 {#referencing-static-assets}
所有的 Markdown 文件都会被编译成 Vue 组件,并由 [Vite](https://vitejs.dev/guide/assets.html) 处理。可以,**并且应该**使用相对路径来引用任何资源:
所有的 Markdown 文件都会被编译成 Vue 组件,并由 [Vite](https://vitejs.dev/guide/assets.html) 处理。可以,**并且应该**使用相对路径来引用任何资源:
```md
![An image](./image.png)
```
可以在 Markdown 文件、主题中的 `*.vue` 组件、样式和普通的 `.css` 文件中引用静态资源,通过使用绝对路径 (基于项目根目录) 或者相对路径 (基于文件系统)。后者类似于 ViteVue CLI或者 webpack 的 `file-loader` 的行为。
可以在 Markdown 文件、主题中的 `*.vue` 组件、样式和普通的 `.css` 文件中引用静态资源,通过使用绝对路径 (基于项目根目录) 或者相对路径 (基于文件系统)。后者类似于 ViteVue CLI或者 webpack 的 `file-loader` 的行为。
常见的图像,媒体和字体文件会被自动检测并视作资源。
@ -18,25 +18,25 @@
## public 目录 {#the-public-directory}
有时可能需要提供一些静态资源,但这些资源没有直接被 Markdown 或主题组件直接引用,或者你可能想以原始文件名提供某些文件,像 `robots.txt`favicons 和 PWA 图标这样的文件。
有时可能需要一些静态资源,但这些资源没有直接被 Markdown 或主题组件直接引用,或者你可能想以原始文件名提供某些文件,像 `robots.txt`favicons 和 PWA 图标这样的文件。
可以将这些文件放置在[源目录](./routing#source-directory)的 `public` 目录中。例如,如果你的项目根目录是 `./docs`,并且使用默认源目录位置,那么你的 public 目录将是 `./docs/public`
可以将这些文件放置在[源目录](./routing#source-directory)的 `public` 目录中。例如,如果项目根目录是 `./docs`,并且使用默认源目录位置,那么 public 目录将是 `./docs/public`
放置在 `public` 中的资源将按原样复制到输出目录的根目录中。
请注意,应使用根绝对路径来引用放置在 `public` 中的文件 - 例如,`public/icon.png` 应始终在源代码中作为 `/icon.png` 引用。
请注意,应使用根绝对路径来引用放置在 `public` 中的文件 - 例如,`public/icon.png` 应始终在源代码中作为 `/icon.png` 引用。
## 根 URL {#base-url}
如果你的网站没有部署在根 URL 上,则需要在 `.vitepress/config.js` 中设置 `base` 选项。例如,如果计划将网站部署到 `https://foo.github.io/bar/`,则 `base` 应设置为 `'/bar/'`(它应始终以斜杠开头和结尾)。
如果网站没有部署在根 URL 上,则需要在 `.vitepress/config.js` 中设置 `base` 选项。例如,如果计划将网站部署到 `https://foo.github.io/bar/`,则 `base` 应设置为 `'/bar/'`(它应始终以斜杠开头和结尾)。
所有静态资源路径都会被自动处理,来适应不同的 `base` 配置值。例如,如果你的 markdown 中有一个对 `public` 中的资源的绝对引用:
所有静态资源路径都会被自动处理,来适应不同的 `base` 配置值。例如,如果 markdown 中有一个对 `public` 中的资源的绝对引用:
```md
![An image](/image-inside-public.png)
```
在这种情况下,更改 `base` 配置值时,**无需**更新该引用。
在这种情况下,更改 `base` 配置值时,**无需**更新该引用。
但是如果你正在编写一个主题组件,它动态的链接到资源,例如一个图片,它的 `src` 基于主题配置值:

@ -2,7 +2,7 @@
## 解析主题 {#theme-resolving}
可以通过创建一个 `.vitepress/theme/index.js``.vitepress/theme/index.ts` 文件 (即“主题入口文件”) 来启用自定义主题:
可以通过创建一个 `.vitepress/theme/index.js``.vitepress/theme/index.ts` 文件 (即“主题入口文件”) 来启用自定义主题:
```
.
@ -66,7 +66,7 @@ export default {
默认导出是自定义主题的唯一方式,并且只有 `Layout` 属性是必须的。所以从技术上讲,一个 VitePress 主题可以只是一个单独的 Vue 组件。
你的组件内部,它的工作方式就像是一个普通的 Vite + Vue 3 应用。请注意,主题还需要保证 [SSR 兼容](./ssr-compat)。
在组件内部,它的工作方式就像是一个普通的 Vite + Vue 3 应用。请注意,主题还需要保证 [SSR 兼容](./ssr-compat)。
## 构建布局 {#building-a-layout}
@ -150,7 +150,7 @@ const { page, frontmatter } = useData()
</template>
```
请查看[运行时 API 参考](../reference/runtime-api)获取主题组件中所有可用内容。此外,可以利用[构建时数据加载](./data-loading)来生成数据驱动布局——例如,一个列出当前项目中所有博客文章的页面。
请查看[运行时 API 参考](../reference/runtime-api)获取主题组件中所有可用内容。此外,可以利用[构建时数据加载](./data-loading)来生成数据驱动布局——例如,一个列出当前项目中所有博客文章的页面。
## 分发自定义主题 {#distributing-a-custom-theme}
@ -160,13 +160,13 @@ const { page, frontmatter } = useData()
1. 在包入口将主题对象作为默认导出来导出。
2. 如果合适的话,将你的主题配置类型定义作为 `ThemeConfig` 导出。
2. 如果合适的话,将主题配置类型定义作为 `ThemeConfig` 导出。
3. 如果你的主题需要调整 VitePress 配置,请在包子路径下 (例如 `my-theme/config`) 下导出该配置,以便用户拓展。
3. 如果主题需要调整 VitePress 配置,请在包子路径下 (例如 `my-theme/config`) 下导出该配置,以便用户拓展。
4. 记录主题配置选项 (通过配置文件和 frontmatter)。
5. 提供清晰的说明关于如何使用你的主题 (见下文)。
5. 提供清晰的说明关于如何使用主题 (见下文)。
## 使用自定义主题 {#consuming-a-custom-theme}
@ -193,7 +193,7 @@ export default {
}
```
如果主题需要特殊的 VitePress 配置,也需要在配置中拓展:
如果主题需要特殊的 VitePress 配置,也需要在配置中拓展:
```ts
// .vitepress/theme/config.ts

@ -1,8 +1,8 @@
# 构建时数据加载 {#build-time-data-loading}
VitePress 提供了**数据加载**的功能,它允许加载任意数据并从页面或组件中导入它。数据加载**只在构建时**执行:最终的数据将被序列化为 JavaScript 包中的 JSON。
VitePress 提供了**数据加载**的功能,它允许加载任意数据并从页面或组件中导入它。数据加载**只在构建时**执行:最终的数据将被序列化为 JavaScript 包中的 JSON。
数据加载可以被用于获取远程数据,也可以基于本地文件生成元数据。例如,可以使用数据加载来解析所有本地 API 页面并自动生成所有 API 入口的索引。
数据加载可以被用于获取远程数据,也可以基于本地文件生成元数据。例如,可以使用数据加载来解析所有本地 API 页面并自动生成所有 API 入口的索引。
## 基本用法 {#basic-usage}
@ -19,9 +19,9 @@ export default {
}
```
数据加载模块只在 Node.js 中执行,因此可以按需导入 Node API 和 npm 依赖。
数据加载模块只在 Node.js 中执行,因此可以按需导入 Node API 和 npm 依赖。
然后,可以在 `.md` 页面和 `.vue` 组件中使用 `data` 命名导出从该文件中导入数据:
然后,可以在 `.md` 页面和 `.vue` 组件中使用 `data` 命名导出从该文件中导入数据:
```vue
<script setup>
@ -54,9 +54,9 @@ export default {
## 使用本地文件生成数据 {#data-from-local-files}
需要基于本地文件生成数据时,应该在数据加载中使用 `watch` 选项,以便这些文件改动时可以触发热更新。
当需要基于本地文件生成数据时,应该在数据加载中使用 `watch` 选项,以便这些文件改动时可以触发热更新。
`watch` 选项也很方便,因为可以使用 [glob 模式](https://github.com/mrmlnc/fast-glob#pattern-syntax) 匹配多个文件。模式可以相对于加载器文件本身,`load()` 函数将接收匹配文件的绝对路径。
`watch` 选项也很方便,因为可以使用 [glob 模式](https://github.com/mrmlnc/fast-glob#pattern-syntax) 匹配多个文件。模式可以相对于加载器文件本身,`load()` 函数将接收匹配文件的绝对路径。
下面的例子展示了如何使用 [csv-parse](https://github.com/adaltas/node-csv/tree/master/packages/csv-parse/) 加载 CSV 文件并将其转换为 JSON。因为此文件仅在构建时执行因此不会将 CSV 解析器发送到客户端!
@ -133,7 +133,7 @@ import { data as posts } from './posts.data.js'
### 选项 {#options}
默认数据可能不适合所有需求——可以选择使用选项转换数据:
默认数据可能不适合所有需求——可以选择使用选项转换数据:
```js
// posts.data.js
@ -216,7 +216,7 @@ interface ContentOptions<T = ContentData[]> {
## 为数据加载器导出类型 {#typed-data-loaders}
当使用 TypeScript 时,可以像这样为加载器和 `data` 导出类型:
当使用 TypeScript 时,可以像这样为加载器和 `data` 导出类型:
```ts
import { defineLoader } from 'vitepress'

@ -2,7 +2,7 @@
outline: deep
---
# 部署你的 VitePress 网站 {#deploy-your-vitepress-site}
# 部署 VitePress 网站 {#deploy-your-vitepress-site}
以下指南基于一些共设前提:
@ -49,9 +49,9 @@ outline: deep
## 设定 public 根目录 {#setting-a-public-base-path}
默认情况下,我们假设站点将部署在域名 `/`)的根路径上。如果你的网站将在子路径中提供服务,例如 `https://mywebsite.com/blog/`,则需要在 VitePress 配置中将 [`base`](../reference/site-config#base)选项设置为 `'/blog/'`
默认情况下,我们假设站点将部署在域名 `/`)的根路径上。如果网站将在子路径中提供服务,例如 `https://mywebsite.com/blog/`,则需要在 VitePress 配置中将 [`base`](../reference/site-config#base)选项设置为 `'/blog/'`
**例:** 如果你使用的是 Github或 GitLab页面并部署到 `user.github.io/repo/`,请将你的 `base` 设置为 `/repo/`
**例:** 如果你使用的是 Github或 GitLab页面并部署到 `user.github.io/repo/`,请将 `base` 设置为 `/repo/`
## HTTP 缓存标头 {#http-cache-headers}
@ -195,7 +195,7 @@ Cache-Control: max-age=31536000,immutable
2. 在存储库设置中的 “Pages” 菜单项下,选择 “Build and deployment > Source > GitHub Actions”。
3. 将更改推送到 `main` 分支并等待 GitHub Actions 工作流完成。你应该看到你的站点部署到 `https://<username>.github.io/[repository]/``https://<custom-domain>/`,这取决于你的设置。你的网站将在每次推送到 `main` 分支时自动部署。
3. 将更改推送到 `main` 分支并等待 GitHub Actions 工作流完成。你应该看到站点部署到 `https://<username>.github.io/[repository]/``https://<custom-domain>/`,这取决于你的设置。你的网站将在每次推送到 `main` 分支时自动部署。
### GitLab Pages
1. 如果你想部署到 `https://<username> .gitlab.io/<repository> /`,将 VitePress 配置中的 `outDir` 设置为 `../public`。将 `base` 选项配置为 `'/<repository>/'`
@ -288,4 +288,4 @@ Cache-Control: max-age=31536000,immutable
### Kinsta 静态站点托管 {#kinsta-static-site-hosting}
你可以按照这些 [说明](https://kinsta.com/docs/vitepress-static-site-example/) 在 [Kinsta](https://kinsta.com/static-site-hosting/) 上部署你的 Vitepress 网站。
你可以按照这些 [说明](https://kinsta.com/docs/vitepress-static-site-example/) 在 [Kinsta](https://kinsta.com/static-site-hosting/) 上部署 Vitepress 网站。

@ -8,9 +8,9 @@ VitePress 默认的主题已经针对文档进行了优化,并且可以进行
但是有一些情况仅靠配置是不够的。例如:
1. 需要调整 CSS 样式;
2. 需要修改 Vue 应用实例,例如注册全局组件;
3. 需要通过 layout 插槽将自定义内容注入到主题中;
1. 需要调整 CSS 样式;
2. 需要修改 Vue 应用实例,例如注册全局组件;
3. 需要通过 layout 插槽将自定义内容注入到主题中;
这些高级自定义配置将需要使用自定义主题来“拓展”默认主题。
@ -42,7 +42,7 @@ export default DefaultTheme
## 使用自定义字体 {#using-different-fonts}
VitePress 使用 [Inter](https://rsms.me/inter/) 作为默认字体,并且将其包含在生成的输出中。该字体在生产环境中也会自动预加载。但是如果要使用不同的主字体,这可能不是一个好的选择。
VitePress 使用 [Inter](https://rsms.me/inter/) 作为默认字体,并且将其包含在生成的输出中。该字体在生产环境中也会自动预加载。但是如果要使用不同的主字体,这可能不是一个好的选择。
为了避免在生成后的输出中包含 Inter 字体,请从 `vitepress/theme-without-fonts` 中导入主题:
@ -66,7 +66,7 @@ export default DefaultTheme
如果你在使用像是[团队页](/reference/default-theme-team-page)这样的组件,请确保也在从 `vitepress/theme-without-fonts` 中导入它们!
:::
如果你的字体是通过 `@font-face` 引用的本地文件,它将会被作为资源被包含在 `.vitepress/dist/asset` 目录下,并且使用哈希后的文件名。为了预加载这个文件,请使用 [transformHead](/reference/site-config#transformhead) 构建钩子:
如果字体是通过 `@font-face` 引用的本地文件,它将会被作为资源被包含在 `.vitepress/dist/asset` 目录下,并且使用哈希后的文件名。为了预加载这个文件,请使用 [transformHead](/reference/site-config#transformhead) 构建钩子:
```js
// .vitepress/config.js
@ -108,7 +108,7 @@ export default {
}
```
如果使用 TypeScript:
如果使用 TypeScript:
```ts
// .vitepress/theme/index.ts
import type { Theme } from 'vitepress'
@ -123,7 +123,7 @@ export default {
} satisfies Theme
```
因为我们使用 Vite还可以利用 Vite 的 [glob 导入功能](https://cn.vitejs.dev/guide/features.html#glob-import)来自动注册一个组件目录。
因为我们使用 Vite还可以利用 Vite 的 [glob 导入功能](https://cn.vitejs.dev/guide/features.html#glob-import)来自动注册一个组件目录。
## 布局插槽 {#layout-slots}
@ -159,7 +159,7 @@ const { Layout } = DefaultTheme
</template>
```
也可以使用渲染函数。
也可以使用渲染函数。
```js
// .vitepress/theme/index.js
@ -217,7 +217,7 @@ export default {
### 关于外观切换 {#on-appearance-toggle}
可以扩展默认主题以在切换颜色模式时提供自定义过渡动画。一个例子:
可以扩展默认主题以在切换颜色模式时提供自定义过渡动画。一个例子:
```vue
<!-- .vitepress/theme/Layout.vue -->
@ -311,7 +311,7 @@ provide('toggle-appearance', async ({ clientX: x, clientY: y }: MouseEvent) => {
## 重写内部组件 {#overriding-internal-components}
可以使用 Vite 的 [aliases](https://vitejs.dev/config/shared-options.html#resolve-alias) 来用你的自定义组件替换默认主题的组件:
可以使用 Vite 的 [aliases](https://vitejs.dev/config/shared-options.html#resolve-alias) 来用自定义组件替换默认主题的组件:
```ts
import { fileURLToPath, URL } from 'node:url'

@ -11,15 +11,15 @@ editLink: true
---
```
许多站点或默认主题配置选项在 frontmatter 中都有相应的选项。可以使用 frontmatter 来覆盖当前页面的特定行为。详细信息请参见 [frontmatter 配置参考](../reference/frontmatter-config)。
许多站点或默认主题配置选项在 frontmatter 中都有相应的选项。可以使用 frontmatter 来覆盖当前页面的特定行为。详细信息请参见 [frontmatter 配置参考](../reference/frontmatter-config)。
还可以定义自己的 frontmatter 数据,以在页面上的动态 Vue 表达式中使用。
还可以定义自己的 frontmatter 数据,以在页面上的动态 Vue 表达式中使用。
## 访问 frontmatter 数据 {#accessing-frontmatter-data}
frontmatter 数据可以通过特殊的 `$frontmatter` 全局变量来访问:
下面的例子展示了应该如何在 Markdown 文件中使用它:
下面的例子展示了应该如何在 Markdown 文件中使用它:
```md
---
@ -32,7 +32,7 @@ editLink: true
Guide content
```
还可以使用 [`useData()`](../reference/runtime-api#usedata) 辅助函数在 `<script setup>` 中访问当前页面的 frontmatter。
还可以使用 [`useData()`](../reference/runtime-api#usedata) 辅助函数在 `<script setup>` 中访问当前页面的 frontmatter。
## 其他 frontmatter 格式 {#alternative-frontmatter-formats}

@ -52,7 +52,7 @@ $ bun add -D vitepress
:::
::: tip 注意
VitePress 是仅 ESM 的软件包。不要使用 `require()` 导入它,并确保最新的 `package.json` 包含 `"type": "module"`,或者更改相关文件的文件扩展名,例如`.vitepress/config.js` 到 `.mjs`/`.mts`。更多详情请参考[Vite 故障排除指南](http://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only)。此外,在异步 CJS 上下文中,可以使用 `await import('vitepress')` 代替。
VitePress 是仅 ESM 的软件包。不要使用 `require()` 导入它,并确保最新的 `package.json` 包含 `"type": "module"`,或者更改相关文件的文件扩展名,例如`.vitepress/config.js` 到 `.mjs`/`.mts`。更多详情请参考[Vite 故障排除指南](http://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only)。此外,在异步 CJS 上下文中,可以使用 `await import('vitepress')` 代替。
:::
@ -76,7 +76,7 @@ $ bunx vitepress init
:::
将需要回答几个简单的问题:
将需要回答几个简单的问题:
<<< @/snippets/init.ansi
@ -86,9 +86,9 @@ $ bunx vitepress init
## 文件结构 {#file-structure}
如果正在构建一个独立的 VitePress 站点,可以在当前目录 (`./`) 中搭建站点。但是,如果在现有项目中与其他源代码一起安装 VitePress建议将站点搭建在嵌套目录 (例如 `./docs`) 中,以便它与项目的其余部分分开。
如果正在构建一个独立的 VitePress 站点,可以在当前目录 (`./`) 中搭建站点。但是,如果在现有项目中与其他源代码一起安装 VitePress建议将站点搭建在嵌套目录 (例如 `./docs`) 中,以便它与项目的其余部分分开。
假设选择在 `./docs` 中搭建 VitePress 项目,生成的文件结构应该是这样的:
假设选择在 `./docs` 中搭建 VitePress 项目,生成的文件结构应该是这样的:
```
.

@ -51,7 +51,7 @@ interface LocaleSpecificConfig<ThemeConfig = any> {
有关自定义默认主题的文本占位符的信息,请参考 [`DefaultTheme.Config`](https://github.com/vuejs/vitepress/blob/main/types/default-theme.d.ts) 接口。不要在 locale 级别覆盖 `themeConfig.algolia``themeConfig.carbonAds`。想获取多语言查询的信息,请参考 [Algolia docs](../reference/default-theme-search#i18n)。
**提示:** 配置文件也可以存储在 `docs/.vitepress/config/index.ts`。通过为每个语言环境创建一个配置文件,然后从 `index.ts` 合并并导出它们,可以更好的组织文件。
**提示:** 配置文件也可以存储在 `docs/.vitepress/config/index.ts`。通过为每个语言环境创建一个配置文件,然后从 `index.ts` 合并并导出它们,可以更好的组织文件。
## 为本地化设置子目录 {#separate-directory-for-each-locale}
@ -67,7 +67,7 @@ docs/
├─ foo.md
```
但是VitePress 默认不会将 `/` 重定向到 `/en/`需要配置你的服务来实现这一点。例如,在使用 Netlify 时,可以添加一个 `docs/public/_redirects` 文件,如下所示:
但是VitePress 默认不会将 `/` 重定向到 `/en/`。需要配置服务来实现这一点。例如,在使用 Netlify 时,可以添加一个 `docs/public/_redirects` 文件,如下所示:
```
/* /es/:splat 302 Language=es
@ -75,7 +75,7 @@ docs/
/* /en/:splat 302
```
**提示:** 如果使用上述的方法,可以使用`nf_lang` cookie 来保存用户的语言选择。一个非常基础的方法是通过在自定义主题的 [setup](./custom-theme#using-a-custom-theme) 函数中注册一个侦听器:
**提示:** 如果使用上述的方法,可以使用`nf_lang` cookie 来保存用户的语言选择。一个非常基础的方法是通过在自定义主题的 [setup](./custom-theme#using-a-custom-theme) 函数中注册一个侦听器:
```ts
// docs/.vitepress/theme/index.ts
@ -96,4 +96,4 @@ export default {
## RTL 支持 (实验性功能) {#rtl-support-experimental}
要支持 RTL需要在配置中指定 `dir: 'rtl'` 并且使用一些 RTLCSS PostCSS 插件,例如 <https://github.com/MohammadYounes/rtlcss>, <https://github.com/vkalinichev/postcss-rtl> 或者 <https://github.com/elchininet/postcss-rtlcss>需要配置 PostCSS 插件,使用 `:where([dir="ltr"])``:where([dir="rtl"])` 作为前缀,以防止 CSS 特异性问题。
要支持 RTL需要在配置中指定 `dir: 'rtl'` 并且使用一些 RTLCSS PostCSS 插件,例如 <https://github.com/MohammadYounes/rtlcss>, <https://github.com/vkalinichev/postcss-rtl> 或者 <https://github.com/elchininet/postcss-rtlcss>。需要配置 PostCSS 插件,使用 `:where([dir="ltr"])``:where([dir="rtl"])` 作为前缀,以防止 CSS 特异性问题。

@ -14,7 +14,7 @@ VitePress 带有内置的 Markdown 拓展。
# 使用自定义锚点 {#my-anchor}
```
这允许将标题链接为 `#my-anchor`,而不是默认的 `#使用自定义锚点`
这允许将标题链接为 `#my-anchor`,而不是默认的 `#使用自定义锚点`
## 链接 {#links}
@ -39,7 +39,7 @@ VitePress 带有内置的 Markdown 拓展。
└─ four.md
```
假设现在处于 `foo/one.md` 文件中:
假设现在处于 `foo/one.md` 文件中:
```md
[Home](/) <!-- sends the user to the root index.md -->
@ -108,7 +108,7 @@ lang: en-US
:tada: :100:
这里可以找到[所有支持的 emoji 列表](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.mjs)。
这里可以找到[所有支持的 emoji 列表](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.mjs)。
## 目录表 (TOC) {#table-of-contents}
@ -206,7 +206,7 @@ console.log('Hello, VitePress!')
```
:::
此外,可以通过在站点配置中添加以下内容来全局设置自定义标题,如果不是用英语书写,这会很有帮助:
此外,可以通过在站点配置中添加以下内容来全局设置自定义标题,如果不是用英语书写,这会很有帮助:
```ts
// config.ts
@ -227,7 +227,7 @@ export default defineConfig({
### `raw`
这是一个特殊的容器,可以用来防止与 VitePress 的样式和路由冲突。这在记录组件库时特别有用。可能还想查看 [whyframe](https://whyframe.dev/docs/integrations/vitepress) 以获得更好的隔离。
这是一个特殊的容器,可以用来防止与 VitePress 的样式和路由冲突。这在记录组件库时特别有用。可能还想查看 [whyframe](https://whyframe.dev/docs/integrations/vitepress) 以获得更好的隔离。
**语法**
@ -239,7 +239,7 @@ Wraps in a <div class="vp-raw">
`vp-raw` class 也可以直接用于元素。样式隔离目前是可选的:
- 使用喜欢的包管理器来安装需要的依赖项:
- 使用喜欢的包管理器来安装需要的依赖项:
```sh
$ npm add -D postcss
@ -265,7 +265,7 @@ Wraps in a <div class="vp-raw">
## 代码块中的语法高亮 {#syntax-highlighting-in-code-blocks}
VitePress 使用 [Shikiji](https://github.com/antfu/shikiji) ([Shiki](https://shiki.matsu.io/) 的改进版本) 在 Markdown 代码块中使用彩色文本实现语法高亮。Shiki 支持多种编程语言。需要做的就是将有效的语言别名附加到代码块的开头:
VitePress 使用 [Shikiji](https://github.com/antfu/shikiji) ([Shiki](https://shiki.matsu.io/) 的改进版本) 在 Markdown 代码块中使用彩色文本实现语法高亮。Shiki 支持多种编程语言。需要做的就是将有效的语言别名附加到代码块的开头:
**输入**
@ -509,7 +509,7 @@ export default {
## 行号 {#line-numbers}
可以通过以下配置为每个代码块启用行号:
可以通过以下配置为每个代码块启用行号:
```js
export default {
@ -521,7 +521,7 @@ export default {
查看 [`markdown` 选项](../reference/site-config#markdown) 获取更多信息。
可以在你的代码块中添加 `:line-numbers` / `:no-line-numbers` 标记来覆盖在配置中的设置。
可以在代码块中添加 `:line-numbers` / `:no-line-numbers` 标记来覆盖在配置中的设置。
**输入**
@ -567,7 +567,7 @@ const line4 = 'This is line 4'
## 导入代码片段 {#import-code-snippets}
可以通过下面的语法来从现有文件中导入代码片段:
可以通过下面的语法来从现有文件中导入代码片段:
```md
<<< @/filepath
@ -594,7 +594,7 @@ const line4 = 'This is line 4'
<<< @/snippets/snippet.js
::: tip
`@` 的值对应于源代码根目录,默认情况下是 VitePress 项目根目录,除非配置了 `srcDir`。或者也可以从相对路径导入:
`@` 的值对应于源代码根目录,默认情况下是 VitePress 项目根目录,除非配置了 `srcDir`。或者也可以从相对路径导入:
```md
<<< ../snippets/snippet.js
@ -602,7 +602,7 @@ const line4 = 'This is line 4'
:::
也可以使用 [VS Code region](https://code.visualstudio.com/docs/editor/codebasics#_folding) 来只包含代码文件的相应部分。可以在文件目录后面的 `#` 符号后提供一个自定义的区域名:
也可以使用 [VS Code region](https://code.visualstudio.com/docs/editor/codebasics#_folding) 来只包含代码文件的相应部分。可以在文件目录后面的 `#` 符号后提供一个自定义的区域名:
**输入**
@ -618,7 +618,7 @@ const line4 = 'This is line 4'
<<< @/snippets/snippet-with-region.js#snippet{1}
也可以像这样在大括号内(`{}`)指定语言:
也可以像这样在大括号内(`{}`)指定语言:
```md
<<< @/snippets/snippet.cs{c#}
@ -636,7 +636,7 @@ const line4 = 'This is line 4'
## 代码组 {#code-groups}
可以像这样对多个代码块进行分组:
可以像这样对多个代码块进行分组:
**输入**
@ -694,7 +694,7 @@ export default config
:::
也可以在代码组中[导入代码片段](#import-code-snippets)
也可以在代码组中[导入代码片段](#import-code-snippets)
**输入**
@ -724,13 +724,13 @@ export default config
## 包含 markdown 文件 {#markdown-file-inclusion}
可以像这样在一个 markdown 文件中包含另一个 markdown 文件,甚至是内嵌的。
可以像这样在一个 markdown 文件中包含另一个 markdown 文件,甚至是内嵌的。
::: tip
也可以使用 `@`,它的值对应于源代码根目录,默认情况下是 VitePress 项目根目录,除非配置了 `srcDir`
也可以使用 `@`,它的值对应于源代码根目录,默认情况下是 VitePress 项目根目录,除非配置了 `srcDir`
:::
例如,可以这样用相对路径包含 Markdown 文件:
例如,可以这样用相对路径包含 Markdown 文件:
**输入**
@ -803,12 +803,12 @@ Can be created using `.foorc.json`.
所选行范围的格式可以是: `{3,}``{,10}`、`{1,10}`
::: warning
如果指定的文件不存在,这将不会产生错误。因此,在使用这个功能的时候请保证内容按预期呈现。
如果指定的文件不存在,这将不会产生错误。因此,在使用这个功能的时候请保证内容按预期呈现。
:::
## 数学方程 {#math-equations}
现在这是可选的。要启用它, 需要安装 `markdown-it-mathjax3`,在配置文件中设置`markdown.math` 为 `true`
现在这是可选的。要启用它, 需要安装 `markdown-it-mathjax3`,在配置文件中设置`markdown.math` 为 `true`
```sh
npm add -D markdown-it-mathjax3
@ -867,7 +867,7 @@ export default {
## 高级配置 {#advanced-configuration}
VitePress 使用 [markdown-it](https://github.com/markdown-it/markdown-it) 作为 Markdown 渲染器。上面提到的很多拓展功能都是通过自定义插件实现的。可以使用 `.vitepress/config.js` 中的 `markdown` 选项来进一步自定义 `markdown-it` 实例。
VitePress 使用 [markdown-it](https://github.com/markdown-it/markdown-it) 作为 Markdown 渲染器。上面提到的很多拓展功能都是通过自定义插件实现的。可以使用 `.vitepress/config.js` 中的 `markdown` 选项来进一步自定义 `markdown-it` 实例。
```js
import { defineConfig } from 'vitepress'

@ -1,6 +1,6 @@
# 从 VitePress 0.x 迁移 {#migration-from-vitepress-0-x}
如果你来自 VitePress 0.x 版本由于新功能和增强功能VitePress 有了一些重大更改。请按照本指南了解如何将你的应用程序迁移到最新的 VitePress。
如果你来自 VitePress 0.x 版本由于新功能和增强功能VitePress 有了一些重大更改。请按照本指南了解如何将应用程序迁移到最新的 VitePress。
## 应用配置 {#app-config}

@ -10,9 +10,9 @@
### 图片 {#images}
与 VuePress 不同在使用静态图片时VitePress 会根据你的配置自动处理这些 [`base`](./asset-handling#base-url)。
与 VuePress 不同在使用静态图片时VitePress 会根据配置自动处理这些 [`base`](./asset-handling#base-url)。
因此,现在可以在没有 `img` 标签的情况下渲染图像。
因此,现在可以在没有 `img` 标签的情况下渲染图像。
```diff
- <img :src="$withBase('/foo.png')" alt="foo">
@ -20,7 +20,7 @@
```
::: warning
对于动态图像,仍然需要 `withBase`,如 [Base URL](./asset-handling#base-url) 中所示。
对于动态图像,仍然需要 `withBase`,如 [Base URL](./asset-handling#base-url) 中所示。
:::
使用 `<img.*withBase\('(.*)'\).*alt="([^"]*)".*>` 正则表达式查找并替换为 `![$2]($1)``![](...)` 语法替换所有图像。

@ -6,7 +6,7 @@
但是,由于 SPA 导航的缺失跨页面链接将导致重新加载整个页面。MPA 模式下的导航不会像 SPA 模式那样立即响应。
同时请注意,默认情况下不使用 JavaScript 意味着你实际上只是将 Vue 作为服务器端模板语言。浏览器不会附加任何事件处理程序,因此将不会有任何交互性。要加载客户端 JavaScript需要使用特殊的 `<script client>` 标签:
同时请注意,默认情况下不使用 JavaScript 意味着你实际上只是将 Vue 作为服务器端模板语言。浏览器不会附加任何事件处理程序,因此将不会有任何交互性。要加载客户端 JavaScript需要使用特殊的 `<script client>` 标签:
```html
<script client>
@ -20,4 +20,4 @@ document.querySelector('h1').addEventListener('click', () => {
`<script client>` 是 VitePress 独有的功能,而不是 Vue 的功能。它可以在 `.md``.vue` 文件中使用,但只能在 MPA 模式下使用。所有主题组件中的客户端脚本将被打包在一起,而特定页面的客户端脚本将会分开处理。
请注意,`<script client>` **不会被视为 Vue 组件代码**:它会看做普通的 JavaScript 模块来处理。因此,只有在你的站点需要绝对最小的客户端交互性时,才应该使用 MPA 模式。
请注意,`<script client>` **不会被视为 Vue 组件代码**:它会看做普通的 JavaScript 模块来处理。因此,只有在站点需要绝对最小的客户端交互性时,才应该使用 MPA 模式。

@ -36,7 +36,7 @@ VitePress 项目的文件结构中有两个重要的概念:项目根目录 (**
项目根目录是 VitePress 将尝试寻找 `.vitepress` 特殊目录的地方。`.vitepress` 目录是 VitePress 配置文件、开发服务器缓存、构建输出和可选主题自定义代码的预留位置。
从命令行运行 `vitepress dev``vitepress build`VitePress 将使用当前工作目录作为项目根目录。要将子目录指定为根目录,需要将相对路径传递给命令。例如,如果你的 VitePress 项目位于 `./docs`应该运行 `vitepress dev docs`
当从命令行运行 `vitepress dev``vitepress build`VitePress 将使用当前工作目录作为项目根目录。要将子目录指定为根目录,需要将相对路径传递给命令。例如,如果 VitePress 项目位于 `./docs`,应该运行 `vitepress dev docs`
```
.
@ -60,9 +60,9 @@ docs/getting-started.md --> /getting-started.html
### 源目录 {#source-directory}
源目录是你的 Markdown 源文件所在的位置。默认情况下,它与项目根目录相同。但是,可以通过 [`srcDir`](../reference/site-config#srcdir) 配置选项对其进行配置。
源目录是 Markdown 源文件所在的位置。默认情况下,它与项目根目录相同。但是,可以通过 [`srcDir`](../reference/site-config#srcdir) 配置选项对其进行配置。
`srcDir` 选项是相对于项目根目录解析的。例如,对于 `srcDir: 'src'`你的文件结构将如下所示:
`srcDir` 选项是相对于项目根目录解析的。例如,对于 `srcDir: 'src'`,文件结构将如下所示:
```
. # project root
@ -81,7 +81,7 @@ src/getting-started.md --> /getting-started.html
## 链接页面 {#linking-between-pages}
在页面之间链接时,可以使用绝对路径和相对路径。请注意,虽然 `.md``.html` 扩展名都可以使用,但最佳做法是省略文件扩展名,以便 VitePress 可以根据你的配置生成最终 URL。
在页面之间链接时,可以使用绝对路径和相对路径。请注意,虽然 `.md``.html` 扩展名都可以使用,但最佳做法是省略文件扩展名,以便 VitePress 可以根据配置生成最终 URL。
```md
<!-- 正确做法 -->
@ -97,7 +97,7 @@ src/getting-started.md --> /getting-started.html
### 链接到非 vitepress 页面 {#linking-to-non-vitepress-pages}
如果想链接到网站中不是由 VitePress 生成的页面,需要使用完整的 URL在新选项卡中打开或明确指定 target
如果想链接到网站中不是由 VitePress 生成的页面,需要使用完整的 URL在新选项卡中打开或明确指定 target
**Input**
@ -111,9 +111,9 @@ src/getting-started.md --> /getting-started.html
::: tip 注意
在 Markdown 链接中,`base` 会自动添加到 URL 前面。这意味着,如果想链接到 `base` 之外的页面,则链接中需要类似 `../../pure.html` 的内容(由浏览器相对于当前页面解析)。
在 Markdown 链接中,`base` 会自动添加到 URL 前面。这意味着,如果想链接到 `base` 之外的页面,则链接中需要类似 `../../pure.html` 的内容(由浏览器相对于当前页面解析)。
或者,可以直接使用锚标记语法:
或者,可以直接使用锚标记语法:
```md
<a href="/pure.html" target="_self">Link to pure.html</a>
@ -134,12 +134,12 @@ src/getting-started.md --> /getting-started.html
- Netlify 默认支持这个。
- Vercel 需要在 [vercel.json 中启用 cleanUrls 选项](https://vercel.com/docs/concepts/projects/project-configuration#cleanurls)。
如果可以使用此功能,还可以启用 VitePress 自己的 [`cleanUrls`](../reference/site-config#cleanurls) 配置选项,以便:
如果可以使用此功能,还可以启用 VitePress 自己的 [`cleanUrls`](../reference/site-config#cleanurls) 配置选项,以便:
- 页面之间的入站链接是在没有 `.html` 扩展名的情况下生成的。
- 如果当前路径以 `.html` 结尾,路由器将执行客户端重定向到无扩展路径。
但是,如果无法为服务器配置此类支持(例如 GitHub 页面),则必须手动采用以下目录结构:
但是,如果无法为服务器配置此类支持(例如 GitHub 页面),则必须手动采用以下目录结构:
```
.
@ -152,7 +152,7 @@ src/getting-started.md --> /getting-started.html
## 路由重写 {#route-rewrites}
可以自定义源目录结构和生成页面之间的映射。当有一个复杂的项目结构时,它很有用。例如,假设有一个包含多个包的 monorepo并且希望将文档与源文件一起放置如下所示
可以自定义源目录结构和生成页面之间的映射。当有一个复杂的项目结构时,它很有用。例如,假设有一个包含多个包的 monorepo并且希望将文档与源文件一起放置如下所示
```
.
@ -167,14 +167,14 @@ src/getting-started.md --> /getting-started.html
│ └─ pkg-b-docs.md
```
希望像这样生成 VitePress 页面:
希望像这样生成 VitePress 页面:
```
packages/pkg-a/src/pkg-a-docs.md --> /pkg-a/index.html
packages/pkg-b/src/pkg-b-docs.md --> /pkg-b/index.html
```
可以通过像这样配置 [`rewrites`](../reference/site-config#rewrites) 选项来实现此目的:
可以通过像这样配置 [`rewrites`](../reference/site-config#rewrites) 选项来实现此目的:
```ts
// .vitepress/config.js
@ -186,7 +186,7 @@ export default {
}
```
`rewrites` 选项还支持动态路由参数。在上面的示例中,如果有很多包,则列出所有路径会很冗长。鉴于它们都具有相同的文件结构,可以像这样简化配置:
`rewrites` 选项还支持动态路由参数。在上面的示例中,如果有很多包,则列出所有路径会很冗长。鉴于它们都具有相同的文件结构,可以像这样简化配置:
```ts
export default {
@ -200,7 +200,7 @@ export default {
::: warning 开启重写功能时使用相对链接
启用重写后,**相对链接应基于重写的路径**。例如,为了创建从 `packages/pkg-a/src/pkg-a-code.md``packages/pkg-b/src/pkg-b-code.md` 的相对链接,应该使用:
启用重写后,**相对链接应基于重写的路径**。例如,为了创建从 `packages/pkg-a/src/pkg-a-code.md``packages/pkg-b/src/pkg-b-code.md` 的相对链接,应该使用:
```md
[Link to PKG B](../pkg-b/pkg-b-code)
@ -209,7 +209,7 @@ export default {
## 动态路由 {#dynamic-routes}
可以使用单个 Markdown 文件和动态数据生成许多页面。例如,可以创建一个 `packages/[pkg].md` 文件,为项目中的每个包生成相应的页面。这里,`[pkg]` 段是一个路由参数,用于区分每个页面。
可以使用单个 Markdown 文件和动态数据生成许多页面。例如,可以创建一个 `packages/[pkg].md` 文件,为项目中的每个包生成相应的页面。这里,`[pkg]` 段是一个路由参数,用于区分每个页面。
### 路径加载文件 {#paths-loader-file}
@ -286,7 +286,7 @@ export default {
### 动态生成路径 {#dynamically-generating-paths}
路径加载器模块在 Node.js 中运行,并且仅在构建期间执行。可以使用本地或远程的任何数据动态生成路径数组。
路径加载器模块在 Node.js 中运行,并且仅在构建期间执行。可以使用本地或远程的任何数据动态生成路径数组。
从本地文件生成路径:
@ -325,14 +325,14 @@ export default {
### 访问页面中的参数 {#accessing-params-in-page}
可以使用参数将附加数据传递到每个页面。Markdown 路由文件可以通过 `$params` 全局属性访问 Vue 表达式中的当前页面参数:
可以使用参数将附加数据传递到每个页面。Markdown 路由文件可以通过 `$params` 全局属性访问 Vue 表达式中的当前页面参数:
```md
- package name: {{ $params.pkg }}
- version: {{ $params.version }}
```
还可以通过 [`useData`](../reference/runtime-api#usedata) runtime API 访问当前页面的参数。这在 Markdown 文件和 Vue 组件中都可用:
还可以通过 [`useData`](../reference/runtime-api#usedata) runtime API 访问当前页面的参数。这在 Markdown 文件和 Vue 组件中都可用:
```vue
<script setup>
@ -347,9 +347,9 @@ console.log(params.value)
### 渲染原始内容 {#rendering-raw-content}
传递给页面的参数将在客户端 JavaScript payload 中序列化,因此应该避免在参数中传递大量数据,例如从远程 CMS 获取的原始 Markdown 或 HTML 内容。
传递给页面的参数将在客户端 JavaScript payload 中序列化,因此应该避免在参数中传递大量数据,例如从远程 CMS 获取的原始 Markdown 或 HTML 内容。
相反,可以使用每个路径对象上的 `content` 属性将此类内容传递到每个页面:
相反,可以使用每个路径对象上的 `content` 属性将此类内容传递到每个页面:
```js
export default {

@ -1,6 +1,6 @@
# Sitemap 生成器 {#sitemap-generation}
# 生成 sitemap {#sitemap-generation}
VitePress 提供开箱即用的为你的网站生成 `sitemap.xml` 文件。要启用它,请将以下内容添加到 `.vitepress/config.js` 中:
VitePress 提供开箱即用的配置,为站生成 `sitemap.xml` 文件。要启用它,请将以下内容添加到 `.vitepress/config.js` 中:
```ts
import { defineConfig } from 'vitepress'
@ -12,11 +12,11 @@ export default defineConfig({
})
```
要在 `sitemap.xml``<lastmod>` 标签,你可以启用 [`lastUpdated`](../reference/default-theme-last-updated) 选项。
要在 `sitemap.xml`包含 `<lastmod>` 标签,可以启用 [`lastUpdated`](../reference/default-theme-last-updated) 选项。
## 选项 {#options}
站点地图由 [`sitemap`](https://www.npmjs.com/package/sitemap) 模块提供支持。你可以将其支持的任何选项传递给配置文件中的 `sitemap` 选项。这些将直接传递给 `SitemapStream` 构造函数。有关更多详细信息,请参阅 [`sitemap` 文档](https://www.npmjs.com/package/sitemap#options-you-can-pass)。例如:
VitePress 的 sitemap 由 [`sitemap`](https://www.npmjs.com/package/sitemap) 模块提供支持。可以将该模块支持的选项传递给配置文件中的 `sitemap` 选项。这些选项将直接传递给 `SitemapStream` 构造函数。有关更多详细信息,请参阅 [`sitemap` 文档](https://www.npmjs.com/package/sitemap#options-you-can-pass)。例如:
```ts
import { defineConfig } from 'vitepress'
@ -31,7 +31,7 @@ export default defineConfig({
## `transformItems` Hook
在将站点地图项写入 `sitemap.xml` 文件之前,你可以使用 `sitemap.transformItems` 钩子来修改站点地图项。使用站点地图项数组调用此挂钩,并期望返回站点地图项数组。例子
在将 sitemap 写入 `sitemap.xml` 文件之前,可以使用 `sitemap.transformItems` 钩子来修改 sitemap。使用 sitemap 调用该钩子,应返回 sitemap 数组。例如
```ts
import { defineConfig } from 'vitepress'
@ -40,7 +40,7 @@ export default defineConfig({
sitemap: {
hostname: 'https://example.com',
transformItems: (items) => {
// 添加新项目或修改/过滤现有项目
// add new items or modify/filter existing items
items.push({
url: '/extra-page',
changefreq: 'monthly',

@ -10,7 +10,7 @@ outline: deep
## `<ClientOnly>`
如果正在使用或演示不支持 SSR 的组件 (例如,包含自定义指令),则可以将它们包装在内置的 `<ClientOnly>` 组件中:
如果正在使用或演示不支持 SSR 的组件 (例如,包含自定义指令),则可以将它们包装在内置的 `<ClientOnly>` 组件中:
```md
<ClientOnly>
@ -20,7 +20,7 @@ outline: deep
## 在导入时访问浏览器 API 的库 {#libraries-that-access-browser-api-on-import}
一些组件或库在**导入时**访问浏览器 API。要使用假定在导入时处于浏览器环境的代码需要动态导入它们。
一些组件或库在**导入时**访问浏览器 API。要使用假定在导入时处于浏览器环境的代码需要动态导入它们。
### 在 mounted 钩子中导入 {#importing-in-mounted-hook}
@ -38,7 +38,7 @@ onMounted(() => {
### 条件导入 {#conditional-import}
也可以使用 `import.meta.env.SSR` 标志 ([Vite 环境变量](https://cn.vitejs.dev/guide/env-and-mode.html#env-变量)的一部分) 来有条件地导入依赖项:
也可以使用 `import.meta.env.SSR` 标志 ([Vite 环境变量](https://cn.vitejs.dev/guide/env-and-mode.html#env-变量)的一部分) 来有条件地导入依赖项:
```js
if (!import.meta.env.SSR) {
@ -48,7 +48,7 @@ if (!import.meta.env.SSR) {
}
```
因为 [`Theme.enhanceApp`](/guide/custom-theme#theme-interface) 可以是异步的,所以可以有条件地导入并注册访问浏览器 API 的 Vue 插件:
因为 [`Theme.enhanceApp`](/guide/custom-theme#theme-interface) 可以是异步的,所以可以有条件地导入并注册访问浏览器 API 的 Vue 插件:
```js
// .vitepress/theme/index.js
@ -64,7 +64,7 @@ export default {
}
```
如果使用 TypeScript:
如果使用 TypeScript:
```ts
// .vitepress/theme/index.ts
@ -99,7 +99,7 @@ const ClientComp = defineClientComponent(() => {
</template>
```
还可以将 props/children/slots 传递给目标组件:
还可以将 props/children/slots 传递给目标组件:
```vue
<script setup>

@ -2,7 +2,7 @@
在 VitePress 中,每个 Markdown 文件都被编译成 HTML而且将其作为 [Vue 单文件组件](https://cn.vuejs.org/guide/scaling-up/sfc.html)处理。这意味着可以在 Markdown 中使用任何 Vue 功能,包括动态模板、使用 Vue 组件或通过添加 `<script>` 标签为页面的 Vue 组件添加逻辑。
值得注意的是VitePress 利用 Vue 的编译器自动检测和优化 Markdown 内容的纯静态部分。静态内容被优化为单个占位符节点,并从页面的 JavaScript 负载中删除以供初始访问。在客户端激活期间也会跳过它们。简而言之,只需注意任何给定页面上的动态部分。
值得注意的是VitePress 利用 Vue 的编译器自动检测和优化 Markdown 内容的纯静态部分。静态内容被优化为单个占位符节点,并从页面的 JavaScript 负载中删除以供初始访问。在客户端激活期间也会跳过它们。简而言之,只需注意任何给定页面上的动态部分。
::: tip SSR 兼容性
所有的 Vue 用法都需要兼容 SSR。参见 [SSR 兼容性](./ssr-compat)获得更多信息和常见的解决方案。
@ -71,7 +71,7 @@ The count is: {{ count }}
在 Markdown 中使用时,`<style scoped>` 需要为当前页面的每个元素添加特殊属性,这将显著增加页面的大小。当我们需要局部范围的样式时 `<style module>` 是首选。
:::
还可以访问 VitePress 的运行时 API例如 [`useData` 辅助函数](../reference/runtime-api#usedata),它提供了当前页面的元数据:
还可以访问 VitePress 的运行时 API例如 [`useData` 辅助函数](../reference/runtime-api#usedata),它提供了当前页面的元数据:
**输入**
@ -98,7 +98,7 @@ const { page } = useData()
## 使用组件 {#using-components}
可以直接在 Markdown 文件中导入和使用 Vue 组件。
可以直接在 Markdown 文件中导入和使用 Vue 组件。
### 在 Markdown 中导入组件 {#importing-in-markdown}
@ -211,7 +211,7 @@ npm install -D less
npm install -D stylus
```
然后可以在 Markdown 和主题组件中使用以下内容:
然后可以在 Markdown 和主题组件中使用以下内容:
```vue
<style lang="sass">

@ -52,6 +52,6 @@ VitePress 旨在使用 Markdown 生成内容时提供出色的开发体验。
VitePress 灵感来源于 VuePress。最初的 VuePress 基于 Vue 2 和 webpack。借助 Vue 3 和 ViteVitePress 提供了更好的开发体验、更好的生产性能、更精美的默认主题和更灵活的自定义 API。
VitePress 和 VuePress 之间的 API 区别主要在于主题和自定义。如果使用的是带有默认主题的 VuePress 1迁移到 VitePress 应该相对简单。
VitePress 和 VuePress 之间的 API 区别主要在于主题和自定义。如果使用的是带有默认主题的 VuePress 1迁移到 VitePress 应该相对简单。
VuePress 2 也投入了精力,它也支持 Vue 3 和 Vite与 VuePress 1 的兼容性更好。但是,并行维护两个 SSG 是难以持续的,因此 Vue 团队决定将重点放在 VitePress作为长期的主要 SSG 选择推荐。

@ -4,7 +4,7 @@
## 用法 {#usage}
可以使用全局组件 `Badge`
可以使用全局组件 `Badge`
```html
### Title <Badge type="info" text="default" />
@ -32,7 +32,7 @@
## 自定义不同类型徽标的背景色 {#customize-type-color}
可以通过覆写 css 来自定义不同类型 `<Badge />` 的样式。以下是默认值。
可以通过覆写 css 来自定义不同类型 `<Badge />` 的样式。以下是默认值。
```css
:root {

@ -1,6 +1,6 @@
# 默认主题配置 {#default-theme-config}
主题配置可让自定义主题。可以通过将 `themeConfig` 添加到配置文件来定义主题配置:
主题配置可让自定义主题。可以通过将 `themeConfig` 添加到配置文件来定义主题配置:
```ts
export default {
@ -23,7 +23,7 @@ export default {
- 类型:`boolean`
将本地语言更改为 `zh` 会将 URL 从 `/foo`(或 `/en/foo/`)更改为 `/zh/foo`可以通过将 `themeConfig.i18nRouting` 设置为 `false` 来禁用此行为。
将本地语言更改为 `zh` 会将 URL 从 `/foo`(或 `/en/foo/`)更改为 `/zh/foo`。可以通过将 `themeConfig.i18nRouting` 设置为 `false` 来禁用此行为。
## logo
@ -50,7 +50,7 @@ type ThemeableImage =
- 类型:`string | false`
可以自定义此项以替换导航中的默认站点标题(应用配置中的 `title`)。当设置为 `false` 时,导航中的标题将被禁用。这在当你的 `logo` 已经包含网站标题文本时很有用。
可以自定义此项以替换导航中的默认站点标题(应用配置中的 `title`)。当设置为 `false` 时,导航中的标题将被禁用。这在当 `logo` 已经包含网站标题文本时很有用。
```ts
export default {
@ -64,7 +64,7 @@ export default {
- 类型:`NavItem`
导航菜单项的配置。可以在[默认主题: 导航栏](./default-theme-nav#navigation-links) 了解更多详情。
导航菜单项的配置。可以在[默认主题: 导航栏](./default-theme-nav#navigation-links) 了解更多详情。
```ts
export default {
@ -111,7 +111,7 @@ interface NavItemWithChildren {
- 类型:`Sidebar`
侧边栏菜单项的配置。可以在[默认主题: 侧边栏](./default-theme-sidebar) 了解更多详情。
侧边栏菜单项的配置。可以在[默认主题: 侧边栏](./default-theme-sidebar) 了解更多详情。
```ts
export default {
@ -174,7 +174,7 @@ export type SidebarItem = {
将此值设置为 `true` 将在页面右侧渲染。\
将此值设置为 `left` 将在页面左侧渲染。
如果想对所有页面禁用它,应该使用 `outline: false`
如果想对所有页面禁用它,应该使用 `outline: false`
## outline
@ -208,7 +208,7 @@ interface Outline {
- 类型:`SocialLink[]`
可以定义此选项以在导航栏中展示带有图标的社交帐户链接。
可以定义此选项以在导航栏中展示带有图标的社交帐户链接。
```ts
export default {
@ -255,7 +255,7 @@ type SocialLinkIcon =
- 类型:`Footer`
- 可以通过 [frontmatter](./frontmatter-config#footer) 进行覆盖。
页脚配置。可以添加 message 和 copyright。由于设计原因仅当页面不包含侧边栏时才会显示页脚。
页脚配置。可以添加 message 和 copyright。由于设计原因仅当页面不包含侧边栏时才会显示页脚。
```ts
export default {
@ -280,7 +280,7 @@ export interface Footer {
- 类型:`EditLink`
- 每个页面可以通过 [frontmatter](./frontmatter-config#editlink) 覆写
编辑链接可让显示链接以编辑 Git 管理服务(例如 GitHub 或 GitLab上的页面。有关详细信息请参阅 [默认主题:编辑链接](./default-theme-edit-link)。
编辑链接可让显示链接以编辑 Git 管理服务(例如 GitHub 或 GitLab上的页面。有关详细信息请参阅 [默认主题:编辑链接](./default-theme-edit-link)。
```ts
export default {
@ -379,7 +379,7 @@ Learn more in [Default Theme: Carbon Ads](./default-theme-carbon-ads)
- 类型:`DocFooter`
可用于自定义出现在上一页和下一页链接上方的文本。如果不是用英语编写文档,这很有帮助。也可用于全局禁用上一页/下一页链接。如果想有选择地启用/禁用上一个/下一个链接,可以使用 [frontmatter](./default-theme-prev-next-links)。
可用于自定义出现在上一页和下一页链接上方的文本。如果不是用英语编写文档,这很有帮助。也可用于全局禁用上一页/下一页链接。如果想有选择地启用/禁用上一个/下一个链接,可以使用 [frontmatter](./default-theme-prev-next-links)。
```ts
export default {

@ -2,7 +2,7 @@
## 站点级配置 {#site-level-config}
编辑链接让你可以显示一个链接,以在 GitHub 或 GitLab 等 Git 管理服务上编辑页面。要启用它,请将 `themeConfig.editLink` 选项添加到你的配置中。
编辑链接让你可以显示一个链接,以在 GitHub 或 GitLab 等 Git 管理服务上编辑页面。要启用它,请将 `themeConfig.editLink` 选项添加到配置中。
```js
export default {
@ -37,7 +37,7 @@ export default {
::: details 它不应该有副作用,也不应该访问其范围之外的任何东西,因为它将在浏览器中被序列化和执行。
:::
默认情况下,这将在文档页面底部添加链接文本"Edit this page"。可以通过定义 `text` 选项来自定义此文本。
默认情况下,这将在文档页面底部添加链接文本"Edit this page"。可以通过定义 `text` 选项来自定义此文本。
```js
export default {

@ -23,7 +23,7 @@ export interface Footer {
}
```
上面的配置也支持 HTML 字符串。所以,例如,如果想配置页脚文本有一些链接,可以调整配置如下:
上面的配置也支持 HTML 字符串。所以,例如,如果想配置页脚文本有一些链接,可以调整配置如下:
```ts
export default {
@ -37,7 +37,7 @@ export default {
```
::: warning
只有内联元素可以在 `message``copyright` 中使用,因为它们渲染在 `<p>` 元素中。如果想添加块元素,请考虑使用 [`layout-bottom`](../guide/extending-default-theme#layout-slots) 插槽。
只有内联元素可以在 `message``copyright` 中使用,因为它们渲染在 `<p>` 元素中。如果想添加块元素,请考虑使用 [`layout-bottom`](../guide/extending-default-theme#layout-slots) 插槽。
:::
请注意,当[侧边栏](./default-theme-sidebar)可见时,不会显示页脚。

@ -1,6 +1,6 @@
# 主页 {#home-page}
VitePress 默认主题提供了一个首页布局,也可以在[此网站首页](../)看到。可以通过 [frontmatter](./frontmatter-config) 指定 `layout: home` 在任何页面上使用它
VitePress 默认主题提供了一个首页布局,也可以在[此网站首页](../)看到。可以通过 [frontmatter](./frontmatter-config) 指定 `layout: home` 在任何页面上使用它
```yaml
---
@ -8,7 +8,7 @@ layout: home
---
```
但是,仅此选项不会有太大作用。可以通过设置其他选项(例如 `hero``features`)向主页添加几个不同的预模板化。
但是,仅此选项不会有太大作用。可以通过设置其他选项(例如 `hero``features`)向主页添加几个不同的预模板化。
## Hero 部分 {#hero-section}
@ -74,7 +74,7 @@ interface HeroAction {
### 自定义 name 的颜色 {#customizing-the-name-color}
VitePress 通过 (`--vp-c-brand-1`) 设置 `name` 的颜色 .但是,可以通过覆写 `--vp-home-hero-name-color` 变量来自定义此颜色。
VitePress 通过 (`--vp-c-brand-1`) 设置 `name` 的颜色 .但是,可以通过覆写 `--vp-home-hero-name-color` 变量来自定义此颜色。
```css
:root {
@ -82,7 +82,7 @@ VitePress 通过 (`--vp-c-brand-1`) 设置 `name` 的颜色 .但是,你可以
}
```
也可以通过组合 `--vp-home-hero-name-background` 来进一步自定义 `name` 为渐变色。
也可以通过组合 `--vp-home-hero-name-background` 来进一步自定义 `name` 为渐变色。
```css
:root {
@ -93,9 +93,9 @@ VitePress 通过 (`--vp-c-brand-1`) 设置 `name` 的颜色 .但是,你可以
## Features 部分 {#features-section}
在 Features section可以在 Hero section 之后列出任意数量的 Features。可以在 frontmatter 中配置 `features`
在 Features section可以在 Hero section 之后列出任意数量的 Features。可以在 frontmatter 中配置 `features`
可以为每个 feature 提供一个图标可以是表情符号或任何类型的图像。当配置的图标是图片svg, png, jpeg...)时,必须提供合适的宽度和高度的图标;还可以在需要时配置其描述、固有大小以及深色和浅色主题下的不同表现。
可以为每个 feature 提供一个图标可以是表情符号或任何类型的图像。当配置的图标是图片svg, png, jpeg...)时,必须提供合适的宽度和高度的图标;还可以在需要时配置其描述、固有大小以及深色和浅色主题下的不同表现。
```yaml
---

@ -1,6 +1,6 @@
# 最后更新于 {#last-updated}
最近一条内容的更新时间会显示在页面右下角。要启用它,请将 `lastUpdated` 选项添加到你的配置中。
最近一条内容的更新时间会显示在页面右下角。要启用它,请将 `lastUpdated` 选项添加到配置中。
::: tip
你必须提交 markdown 文件才能看到最近更新时间。

@ -1,6 +1,6 @@
# 布局 {#layout}
可以通过设置页面 [frontmatter](./frontmatter-config) 选项来选择页面布局。有 3 种布局选项 `doc`、`page` 和 `home`。如果未指定任何内容,则该页面将被视为 `doc` 页面。
可以通过设置页面 [frontmatter](./frontmatter-config) 选项来选择页面布局。有 3 种布局选项 `doc`、`page` 和 `home`。如果未指定任何内容,则该页面将被视为 `doc` 页面。
```yaml
---
@ -12,7 +12,7 @@ layout: doc
`doc` 是默认布局,它将整个 Markdown 内容设置为“documentation”外观。它的工作原理是将整个内容包装在 css `vp-doc` 类中,并将样式应用于它下面的元素。
几乎所有通用元素,例如 `p`, 或 `h2` 都有特殊的样式。因此,请记住,如果在 Markdown 内容中添加任何自定义 HTML这些内容也会受到这些样式的影响。
几乎所有通用元素,例如 `p`, 或 `h2` 都有特殊的样式。因此,请记住,如果在 Markdown 内容中添加任何自定义 HTML这些内容也会受到这些样式的影响。
它还提供下面列出的文档特定功能。这些功能仅在此布局中启用。
@ -25,21 +25,21 @@ layout: doc
`page` 被视为“空白页”。Markdown 仍然会被解析,所有的 [Markdown 拓展](../guide/markdown) 都和 `doc` 布局一样运行,但它没有任何默认样式。
`page` 布局将使可以自行设计所有内容,而不会受 VitePress 主题影响。当想要创建自己的自定义页面时,这很有用。
`page` 布局将使可以自行设计所有内容,而不会受 VitePress 主题影响。当想要创建自己的自定义页面时,这很有用。
请注意,即使在此布局中,如果页面具有匹配的侧边栏配置,侧边栏仍会显示。
## home 布局 {#home-layout}
`home` 将生成模板化的“主页”。在此布局中,可以设置额外的选项,例如 `hero``features` 以进一步自定义内容。请访问[默认主题: 主页](./default-theme-home-page)了解更多详情。
`home` 将生成模板化的“主页”。在此布局中,可以设置额外的选项,例如 `hero``features` 以进一步自定义内容。请访问[默认主题: 主页](./default-theme-home-page)了解更多详情。
## 无布局 {#no-layout}
如果不想要任何布局,可以通过 frontmatter 传递 `layout: false`。如果想要一个完全可自定义的登录页面(默认情况下没有任何侧边栏、导航栏或页脚),此选项很有用。
如果不想要任何布局,可以通过 frontmatter 传递 `layout: false`。如果想要一个完全可自定义的登录页面(默认情况下没有任何侧边栏、导航栏或页脚),此选项很有用。
## 自定义布局 {#custom-layout}
也可以使用自定义布局:
也可以使用自定义布局:
```md
---
@ -47,7 +47,7 @@ layout: foo
---
```
这将在上下文中查找注册名为 `foo` 的组件。例如,可以在 `.vitepress/theme/index.ts`中全局注册你的组件:
这将在上下文中查找注册名为 `foo` 的组件。例如,可以在 `.vitepress/theme/index.ts`中全局注册组件:
```ts
import DefaultTheme from 'vitepress/theme'

@ -4,7 +4,7 @@ Nav 是显示在页面顶部的导航栏。它包含站点标题、全局菜单
## 网站标题和图标 {#site-title-and-logo}
默认情况下nav 显示 [`config.title`](./site-config#title) 作为站点的标题。如果想更改导航栏上显示的内容,可以在 `themeConfig.siteTitle` 选项中定义自定义文本。
默认情况下nav 显示 [`config.title`](./site-config#title) 作为站点的标题。如果想更改导航栏上显示的内容,可以在 `themeConfig.siteTitle` 选项中定义自定义文本。
```js
export default {
@ -14,7 +14,7 @@ export default {
}
```
如果你的站点有图标,则可以通过传递图片路径来显示它。应该将图标直接放在 `public` 中,并赋值该绝对路径。
如果站点有图标,则可以通过传递图片路径来显示它。应该将图标直接放在 `public` 中,并赋值该绝对路径。
```js
export default {
@ -24,7 +24,7 @@ export default {
}
```
添加图标时,它会与站点标题一起显示。如果只需要图标并且想要隐藏站点标题文本,请将 `siteTitle` 选项设置为 `false`
添加图标时,它会与站点标题一起显示。如果只需要图标并且想要隐藏站点标题文本,请将 `siteTitle` 选项设置为 `false`
```js
export default {
@ -35,11 +35,11 @@ export default {
}
```
如果想添加 `alt` 属性或根据暗/亮模式自定义它,还可以将图标作为对象传递。有关详细信息,请参阅 [`themeConfig.logo`](./default-theme-config#logo)。
如果想添加 `alt` 属性或根据暗/亮模式自定义它,还可以将图标作为对象传递。有关详细信息,请参阅 [`themeConfig.logo`](./default-theme-config#logo)。
## 导航链接 {#navigation-links}
可以定义 `themeConfig.nav` 选项以将链接添加到你的导航栏。
可以定义 `themeConfig.nav` 选项以将链接添加到导航栏。
```js
export default {
@ -77,7 +77,7 @@ export default {
请注意,下拉菜单标题(上例中的 `下拉菜单`)不能具有 `link` 属性,因为它是打开下拉对话框的按钮。
还可以通过传入更多嵌套项来进一步向下拉菜单项添加“sections”。
还可以通过传入更多嵌套项来进一步向下拉菜单项添加“sections”。
```js
export default {
@ -101,7 +101,7 @@ export default {
text: 'Dropdown Menu',
items: [
{
// 也可以省略标题
// 也可以省略标题
items: [
{ text: 'Section A Item A', link: '...' },
{ text: 'Section B Item B', link: '...' }
@ -116,7 +116,7 @@ export default {
### 自定义链接的路由匹配状态 {#customize-link-s-active-state}
当前页面位于匹配路径下时,导航菜单项将突出显示。如果 想自定义要匹配的路径,请将 `activeMatch` 属性和正则表达式定义为字符串值。
当前页面位于匹配路径下时,导航菜单项将突出显示。如果 想自定义要匹配的路径,请将 `activeMatch` 属性和正则表达式定义为字符串值。
```js
export default {
@ -135,12 +135,12 @@ export default {
```
::: warning
`activeMatch` 应为正则表达式字符串,但必须将其定义为字符串。我们不能在这里使用实际的 RegExp 对象,因为它在构建期间不可序列化。
`activeMatch` 应为正则表达式字符串,但必须将其定义为字符串。我们不能在这里使用实际的 RegExp 对象,因为它在构建期间不可序列化。
:::
### 自定义链接的“target”和“rel”属性 {#customize-link-s-target-and-rel-attributes}
默认情况下VitePress 会根据链接是否为外部链接自动判断 `target``rel` 属性。但如果愿意,也可以自定义它们。
默认情况下VitePress 会根据链接是否为外部链接自动判断 `target``rel` 属性。但如果愿意,也可以自定义它们。
```js
export default {

@ -1,6 +1,6 @@
# 上下页链接 {#prev-next-links}
可以自定义上(下)一篇链接的文本。如果 想在 上(下)一篇 链接上显示与侧边栏上不同的文本(默认显示侧边栏的文本),这将很有帮助。可以自定义上一页和下一页的文本和链接(显示在文档页脚处)。如果想要的文本与边栏上的文本不同,这会很有帮助。此外,还可以禁用侧边栏中未包含页面的页脚或链接
可以自定义上(下)一篇链接的文本。如果 想在 上(下)一篇 链接上显示与侧边栏上不同的文本(默认显示侧边栏的文本),这将很有帮助。可以自定义上一页和下一页的文本和链接(显示在文档页脚处)。如果想要的文本与边栏上的文本不同,这会很有帮助。此外,还可以禁用侧边栏中未包含页面的页脚或链接
## 上一页 {#prev}
@ -10,7 +10,7 @@
- Details:
指定要在指向上一页的链接上显示的文本/链接。如果没有在 frontmatter 中设置它,文本/链接将从侧边栏配置中推断出来。
指定要在指向上一页的链接上显示的文本/链接。如果没有在 frontmatter 中设置它,文本/链接将从侧边栏配置中推断出来。
- 示例:

@ -178,7 +178,7 @@ export default defineConfig({
## Algolia Search {#algolia-search}
VitePress 支持使用 [Algolia DocSearch](https://docsearch.algolia.com/docs/what-is-docsearch) 搜索你的文档站点。请参阅他们的入门指南。在你的 `.vitepress/config.ts` 中,你至少需要提供以下内容才能使其正常工作:
VitePress 支持使用 [Algolia DocSearch](https://docsearch.algolia.com/docs/what-is-docsearch) 搜索文档站点。请参阅他们的入门指南。在你的 `.vitepress/config.ts` 中,你至少需要提供以下内容才能使其正常工作:
```ts
import { defineConfig } from 'vitepress'

@ -1,6 +1,6 @@
# 侧边栏 {#sidebar}
侧边栏是文档的主要导航块。可以在 [`themeConfig.sidebar`](./default-theme-config#sidebar) 中配置侧边栏菜单。
侧边栏是文档的主要导航块。可以在 [`themeConfig.sidebar`](./default-theme-config#sidebar) 中配置侧边栏菜单。
```js
export default {
@ -66,7 +66,7 @@ export default {
}
```
可以进一步将侧边栏项目嵌入到 6 级深度,从根级别上计数。请注意,深度超过 6 级嵌套物品被忽略,并且不会在侧边栏上显示。
可以进一步将侧边栏项目嵌入到 6 级深度,从根级别上计数。请注意,深度超过 6 级嵌套物品被忽略,并且不会在侧边栏上显示。
```js
export default {
@ -95,7 +95,7 @@ export default {
## 多侧边栏 {#multiple-sidebars}
可能会根据页面路径显示不同的侧边栏。例如,如本网站所示,可能希望在文档中创建单独的侧边栏,例如“指引”页面和“配置参考”页面。
可能会根据页面路径显示不同的侧边栏。例如,如本网站所示,可能希望在文档中创建单独的侧边栏,例如“指引”页面和“配置参考”页面。
为此,首先将你的页面组织到每个所需部分的目录中:
@ -111,7 +111,7 @@ export default {
└─ four.md
```
然后,更新你的配置以定义每个部分的侧边栏。这一次,应该传递一个对象而不是数组。
然后,更新配置以定义每个部分的侧边栏。这一次,应该传递一个对象而不是数组。
```js
export default {
@ -165,7 +165,7 @@ export default {
}
```
默认情况下,所有部分都是“打开”的。如果 希望它们在初始页面加载时“关闭”,请将 `collapsed` 选项设置为 `true`
默认情况下,所有部分都是“打开”的。如果 希望它们在初始页面加载时“关闭”,请将 `collapsed` 选项设置为 `true`
```js
export default {

@ -60,7 +60,7 @@ const members = [
<VPTeamMembers size="small" :members="members" />
`<VPTeamMembers>` 组件有 2 种不同的尺寸,`small` 和 `medium`。虽然它取决于你的偏好,但通常尺寸在文档页面中使用时 `small` 应该更适合。此外,你可以为每个成员添加更多属性,例如添加“描述”或“赞助”按钮。在 [`<VPTeamMembers>`](#vpteammembers)中了解更多信息。
`<VPTeamMembers>` 组件有 2 种不同的尺寸,`small` 和 `medium`。虽然它取决于你的偏好,但通常尺寸在文档页面中使用时 `small` 应该更适合。此外,你可以为每个成员添加更多属性,例如添加“描述”或“赞助”按钮。在 [`<VPTeamMembers>`](#vpteammembers)中了解更多信息。
在文档页面中嵌入团队成员对于小型团队来说非常有用,某种情况下,完整的贡献团队可能太大了,可以引入部分成员作为文档上下文的参考。
@ -70,7 +70,7 @@ const members = [
除了将团队成员添加到 doc 页面,你还可以创建一个完整的团队页面,类似于创建自定义[默认主题:主页](./default-theme-home-page)的方式。
要创建团队页面,首先,创建一个新的 md 文件。文件名无所谓,这里我们就叫它 `team.md` 吧。在这个文件中,在 frontmatter 设置 `layout: page`,然后你可以使用 `TeamPage` 组件来组成你的页面结构。
要创建团队页面,首先,创建一个新的 md 文件。文件名无所谓,这里我们就叫它 `team.md` 吧。在这个文件中,在 frontmatter 设置 `layout: page`,然后你可以使用 `TeamPage` 组件来组成页面结构。
```html
---

@ -4,7 +4,7 @@ outline: deep
# frontmatter 配置 {#frontmatter-config}
frontmatter 支持基于页面的配置。在每个 markdown 文件中,可以使用 frontmatter 配置来覆写站点级别或主题级别的配置选项。此外,还有一些配置选项只能在 frontmatter 中定义。
frontmatter 支持基于页面的配置。在每个 markdown 文件中,可以使用 frontmatter 配置来覆写站点级别或主题级别的配置选项。此外,还有一些配置选项只能在 frontmatter 中定义。
示例用法:
@ -15,7 +15,7 @@ editLink: true
---
```
可以通过 Vue 表达式中的 `$frontmatter` 全局变量访问 frontmatter 数据:
可以通过 Vue 表达式中的 `$frontmatter` 全局变量访问 frontmatter 数据:
```md
{{ $frontmatter.title }}
@ -94,8 +94,8 @@ type HeadConfig =
指定页面的布局。
- `doc` - 它将默认文档样式应用于 markdown 内容。
- `home` - “主页”的特殊布局。可以添加额外的选项,例如 `hero``features`,以快速创建漂亮的落地页。
- `page` - 表现类似于 `doc`,但它不对内容应用任何样式。当想创建一个完全自定义的页面时很有用。
- `home` - “主页”的特殊布局。可以添加额外的选项,例如 `hero``features`,以快速创建漂亮的落地页。
- `page` - 表现类似于 `doc`,但它不对内容应用任何样式。当想创建一个完全自定义的页面时很有用。
```yaml
---
@ -212,7 +212,7 @@ pageClass: custom-page-class
---
```
然后可以在 `.vitepress/theme/custom.css` 文件中自定义该特定页面的样式:
然后可以在 `.vitepress/theme/custom.css` 文件中自定义该特定页面的样式:
```css
.custom-page-class {

@ -82,7 +82,7 @@ interface Route {
## `useRouter` <Badge type="info" text="composable" />
返回 VitePress 路由实例,以便可以以编程方式导航到另一个页面。
返回 VitePress 路由实例,以便可以以编程方式导航到另一个页面。
```ts
interface Router {
@ -133,7 +133,7 @@ interface Router {
由于 VitePress 应用程序在生成静态构建时是在 Node.js 中服务器渲染的,因此任何 Vue 使用都必须符合通用代码要求。简而言之,确保仅在 beforeMount 或 mounted 钩子中访问 Browser/DOM API。
::: details 如果正在使用或演示对 SSR 不友好的组件(例如,包含自定义指令),可以将它们包装在 `ClientOnly` 组件中。
::: details 如果正在使用或演示对 SSR 不友好的组件(例如,包含自定义指令),可以将它们包装在 `ClientOnly` 组件中。
If you are using or demoing components that are not SSR-friendly (for example, contain custom directives), you can wrap them inside the `ClientOnly` component.
:::

@ -10,7 +10,7 @@ Site config 可以定义站点的全局设置。App config 配置选项适用于
### 配置解析 {#config-resolution}
配置文件总是从 `<root>/.vitepress/config.[ext]` 解析,其中 `<root>`你的 VitePress [项目根目录](../guide/routing#root-and-source-directory)`[ext]` 是支持的文件扩展名之一。开箱即用地支持 TypeScript。支持的扩展名包括 `.js`、`.ts`、`.mjs` 和 `.mts`
配置文件总是从 `<root>/.vitepress/config.[ext]` 解析,其中 `<root>` 是 VitePress [项目根目录](../guide/routing#root-and-source-directory)`[ext]` 是支持的文件扩展名之一。开箱即用地支持 TypeScript。支持的扩展名包括 `.js`、`.ts`、`.mjs` 和 `.mts`
建议在配置文件中使用 ES 模块语法。配置文件应该默认导出一个对象:
@ -26,7 +26,7 @@ export default {
:::details 异步的动态配置
如果需要动态生成配置,也可以默认导出一个函数,例如:
如果需要动态生成配置,也可以默认导出一个函数,例如:
```ts
import { defineConfig } from 'vitepress'
@ -53,7 +53,7 @@ export default async () => defineConfig({
})
```
也可以在最外层使用 `await`。例如:
也可以在最外层使用 `await`。例如:
```ts
import { defineConfig } from 'vitepress'
@ -82,7 +82,7 @@ export default defineConfig({
### 配置智能提示 {#config-intellisense}
使用 `defineConfig` 辅助函数将为配置选项提供 TypeScript 支持的智能提示。假设你的 IDE 支持它,那么智能提示在 JavaScript 和 TypeScript 中都将触发。
使用 `defineConfig` 辅助函数将为配置选项提供 TypeScript 支持的智能提示。假设 IDE 支持它,那么智能提示在 JavaScript 和 TypeScript 中都将触发。
```js
import { defineConfig } from 'vitepress'
@ -106,7 +106,7 @@ export default defineConfig({
})
```
如果使用自定义主题并希望对主题配置进行类型检查,则需要改用 `defineConfigWithTheme`,并通过通用参数传递自定义主题的配置类型:
如果使用自定义主题并希望对主题配置进行类型检查,则需要改用 `defineConfigWithTheme`,并通过通用参数传递自定义主题的配置类型:
```ts
import { defineConfigWithTheme } from 'vitepress'
@ -123,15 +123,15 @@ export default defineConfigWithTheme<ThemeConfig>({
- **Vite**
可以使用 VitePress 配置中的 [vite](#vite) 选项配置底层 Vite 实例。无需创建单独的 Vite 配置文件。
可以使用 VitePress 配置中的 [vite](#vite) 选项配置底层 Vite 实例。无需创建单独的 Vite 配置文件。
- **Vue**
VitePress 已经包含 Vite 的官方 Vue 插件([@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue))。可以配置 VitePress 中的 [vue](#vue) 选项。
VitePress 已经包含 Vite 的官方 Vue 插件([@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue))。可以配置 VitePress 中的 [vue](#vue) 选项。
- **Markdown**
可以使用 VitePress 配置中的 [markdown](#markdown) 选项配置底层的 [Markdown-It](https://github.com/markdown-it/markdown-it) 实例。
可以使用 VitePress 配置中的 [markdown](#markdown) 选项配置底层的 [Markdown-It](https://github.com/markdown-it/markdown-it) 实例。
## 站点元数据 {#site-metadata}
@ -177,7 +177,7 @@ export default {
页面标题就是 `Hello | Custom Suffix`.
要完全自定义标题的呈现方式,可以在 `titleTemplate` 中使用 `:title` 标识符:
要完全自定义标题的呈现方式,可以在 `titleTemplate` 中使用 `:title` 标识符:
```ts
export default {
@ -333,9 +333,9 @@ export default {
- 类型:`string`
- 默认值: `/`
站点将部署到的 base URL。如果计划在子路径(例如 GitHub 页面)下部署站点,则需要设置此项。如果计划将你的站点部署到 `https://foo.github.io/bar/`,那么应该将 `base` 设置为 `“/bar/”`。它应该始终以 `/`开头和结尾。
站点将部署到的 base URL。如果计划在子路径例如 GitHub 页面)下部署站点,则需要设置此项。如果计划将站点部署到 `https://foo.github.io/bar/`,那么应该将 `base` 设置为 `“/bar/”`。它应该始终以 `/`开头和结尾。
base 会自动添加到其他选项中以 `/` 开头的所有 URL 前面,因此只需指定一次。
base 会自动添加到其他选项中以 `/` 开头的所有 URL 前面,因此只需指定一次。
```ts
export default {
@ -353,7 +353,7 @@ export default {
当设置为 `true`VitePress 将从 URL 中删除 `.html` 后缀。另请参阅[生成简洁的 URL](../guide/routing#generating-clean-url)。
::: warning 需要服务器支持
要启用此功能,可能需要在你的托管平台上进行额外配置。要使其正常工作,你的服务器必须能够在**不重定向的情况下**访问 `/foo` 时提供 `/foo.html`
要启用此功能,可能需要在托管平台上进行额外配置。要使其正常工作,服务器必须能够在**不重定向的情况下**访问 `/foo` 时提供 `/foo.html`
:::
### rewrites
@ -502,7 +502,7 @@ export default {
是否使用 Git 获取每个页面的最后更新时间戳。时间戳将包含在每个页面的页面数据中,可通过 [`useData`](./runtime-api#usedata) 访问。
使用默认主题时,启用此选项将显示每个页面的最后更新时间。可以通过 [`themeConfig.lastUpdatedText`](./default-theme-config#lastupdatedtext) 选项自定义文本。
使用默认主题时,启用此选项将显示每个页面的最后更新时间。可以通过 [`themeConfig.lastUpdatedText`](./default-theme-config#lastupdatedtext) 选项自定义文本。
## 自定义 {#customization}
@ -510,7 +510,7 @@ export default {
- 类型:`MarkdownOption`
配置 Markdown 解析器选项。VitePress 使用 [Markdown-it](https://github.com/markdown-it/markdown-it) 作为解析器,使用[Shikiji](https://github.com/antfu/shikiji) ([Shiki](https://shiki.matsu.io/) 的改进版本) 来高亮不同语言语法。在此选项中,可以传递各种 Markdown 相关选项以满足的需要。
配置 Markdown 解析器选项。VitePress 使用 [Markdown-it](https://github.com/markdown-it/markdown-it) 作为解析器,使用[Shikiji](https://github.com/antfu/shikiji) ([Shiki](https://shiki.matsu.io/) 的改进版本) 来高亮不同语言语法。在此选项中,可以传递各种 Markdown 相关选项以满足的需要。
```js
export default {
@ -550,7 +550,7 @@ export default {
## 构建钩子 {#build-hooks}
VitePress 构建钩子允许你的网站添加新功能和行为:
VitePress 构建钩子允许向网站添加新功能和行为:
- Sitemap
- Search Indexing
@ -575,7 +575,7 @@ export default {
- 类型:`(context: SSGContext) => Awaitable<SSGContext | void>`
`postRender` 是一个构建钩子,在 SSG 渲染完成时调用。它将允许在 SSG 期间处理传递的内容。
`postRender` 是一个构建钩子,在 SSG 渲染完成时调用。它将允许在 SSG 期间处理传递的内容。
```ts
export default {
@ -597,7 +597,7 @@ interface SSGContext {
- 类型:`(context: TransformContext) => Awaitable<HeadConfig[]>`
`transformHead` 是一个构建钩子,用于在生成每个页面之前转换 head。它将允许添加无法静态添加到你的 VitePress 配置中的 head entries。只需要返回额外的 entries它们将自动与现有 entries 合并。
`transformHead` 是一个构建钩子,用于在生成每个页面之前转换 head。它将允许添加无法静态添加到 VitePress 配置中的 head entries。只需要返回额外的 entries它们将自动与现有 entries 合并。
::: warning
不要改变 `context` 中的任何东西。
@ -625,7 +625,7 @@ interface TransformContext {
}
```
请注意,仅在静态生成站点时才会调用此挂钩。在开发期间不会调用它。如果需要在开发期间添加动态头条目,可以使用 [`transformPageData`](#transformpagedata) 钩子来替代:
请注意,仅在静态生成站点时才会调用此挂钩。在开发期间不会调用它。如果需要在开发期间添加动态头条目,可以使用 [`transformPageData`](#transformpagedata) 钩子来替代:
```ts
export default {
@ -667,10 +667,10 @@ export default {
- 类型:`(pageData: PageData, context: TransformPageContext) => Awaitable<Partial<PageData> | { [key: string]: any } | void>`
`transformPageData` 是一个钩子,用于转换每个页面的 `pageData`可以直接改变 `pageData` 或返回将合并到 `PageData` 中的更改值。
`transformPageData` 是一个钩子,用于转换每个页面的 `pageData`。可以直接改变 `pageData` 或返回将合并到 `PageData` 中的更改值。
::: warning
不要改变 `context` 中的任何东西。请注意,这可能会影响开发服务器的性能,特别是当在钩子中有一些网络请求或大量计算(例如生成图像)时。可以通过判断 `process.env.NODE_ENV === 'production'` 匹配符合条件的情况。
不要改变 `context` 中的任何东西。请注意,这可能会影响开发服务器的性能,特别是当在钩子中有一些网络请求或大量计算(例如生成图像)时。可以通过判断 `process.env.NODE_ENV === 'production'` 匹配符合条件的情况。
:::
```ts

Loading…
Cancel
Save