mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
181 lines
5.3 KiB
Markdown
181 lines
5.3 KiB
Markdown
---
|
|
title: Configuration Guide
|
|
createTime: 2025/10/09 10:48:14
|
|
permalink: /en/config/intro/
|
|
---
|
|
|
|
## Overview
|
|
|
|
==vuepress-theme-plume== is a theme developed based on [VuePress](https://v2.vuepress.vuejs.org/),
|
|
and its configuration fully adheres to VuePress's configuration specifications.
|
|
|
|
**VuePress provides three configuration types:**
|
|
|
|
- **Site Configuration**: The object directly exported from the configuration file (e.g., `.vuepress/config.ts`)
|
|
- **Theme Configuration**: The parameter object passed to the `plumeTheme()` function
|
|
- **Page Configuration**: Defined in the page Frontmatter using YAML syntax
|
|
|
|
## VuePress Configuration File
|
|
|
|
The base configuration file for VuePress is typically `.vuepress/config.js`,
|
|
while TypeScript configuration files are also supported.
|
|
Using `.vuepress/config.ts` provides more comprehensive type hints.
|
|
|
|
VuePress resolves configuration files in the following priority order:
|
|
|
|
**In the current working directory (cwd):**
|
|
|
|
- `vuepress.config.ts`
|
|
- `vuepress.config.js`
|
|
- `vuepress.config.mjs`
|
|
|
|
**In the source directory (sourceDir):**
|
|
|
|
- `.vuepress/config.ts` <Badge type="tip" text="Recommended" />
|
|
- `.vuepress/config.js`
|
|
- `.vuepress/config.mjs`
|
|
|
|
**Basic Configuration Example:**
|
|
|
|
```ts title=".vuepress/config.ts" twoslash
|
|
import { viteBundler } from '@vuepress/bundler-vite'
|
|
import { defineUserConfig } from 'vuepress'
|
|
import { plumeTheme } from 'vuepress-theme-plume'
|
|
|
|
export default defineUserConfig({
|
|
// [!code hl:5]
|
|
// VuePress Base Configuration
|
|
lang: 'zh-CN',
|
|
title: 'Hello, VuePress!',
|
|
description: 'This is my first VuePress site',
|
|
// ...
|
|
|
|
// Use Vite as the bundler
|
|
bundler: viteBundler(),
|
|
|
|
// Enable the Plume theme
|
|
theme: plumeTheme({ // [!code ++:4]
|
|
// Theme configuration options
|
|
// ...
|
|
}),
|
|
})
|
|
```
|
|
|
|
## Theme Configuration File
|
|
|
|
Typically, we configure the theme in `.vuepress/config.ts`:
|
|
|
|
```ts title=".vuepress/config.ts" twoslash
|
|
import { defineUserConfig } from 'vuepress'
|
|
import { plumeTheme } from 'vuepress-theme-plume'
|
|
|
|
export default defineUserConfig({
|
|
theme: plumeTheme({
|
|
// Theme configuration
|
|
}),
|
|
// ...
|
|
})
|
|
```
|
|
|
|
However, modifying this file causes the VuePress service to restart and perform a full refresh.
|
|
For small sites, this process is quick; but for sites with substantial content, each restart requires considerable time.
|
|
|
|
Frequent configuration file modifications can also easily lead to VuePress ==service crashes=={.caution}
|
|
::twemoji:angry-face::, requiring manual service restarts and severely impacting content writing efficiency.
|
|
|
|
**Solution: Theme Hot-Reload Configuration:**
|
|
|
|
The theme provides a `plume.config.ts` configuration file. ==Modifications to this file support hot-reload
|
|
and do not require restarting the service=={.tip} ::twemoji:confetti-ball::.
|
|
|
|
You can configure hot-reload supported fields within it, such as `navbar`, `profile`, etc.
|
|
|
|
::: tip
|
|
These fields can still be configured within the `theme` section of the VuePress configuration file,
|
|
but the settings from the theme configuration file will ultimately be merged into the main configuration.
|
|
|
|
To avoid data duplication, please do not configure the same field in both locations.
|
|
:::
|
|
|
|
::: details What is Hot-Reload?
|
|
|
|
**Hot-Reload** is a development technique that, in the context of VuePress, manifests as:
|
|
|
|
- Configuration changes take effect immediately without restarting the service; the browser does not refresh the page
|
|
- Page modifications take effect immediately; the browser updates content without a full refresh
|
|
|
|
:::
|
|
|
|
### Configuration Method
|
|
|
|
Create the `plume.config.ts` file in the same directory as the VuePress configuration file:
|
|
|
|
::: file-tree
|
|
|
|
- docs
|
|
- .vuepress
|
|
- config.ts
|
|
- **plume.config.ts**
|
|
:::
|
|
|
|
```ts title="plume.config.ts" twoslash
|
|
// @filename: ./navbar.ts
|
|
export default []
|
|
// ---cut---
|
|
import { defineThemeConfig } from 'vuepress-theme-plume'
|
|
import navbar from './navbar'
|
|
|
|
export default defineThemeConfig({
|
|
// Theme configuration
|
|
profile: {
|
|
name: 'Your name',
|
|
},
|
|
navbar,
|
|
})
|
|
```
|
|
|
|
The `defineThemeConfig(config)` function provides full type hints. Except for `plugins`, most configurations can be defined in this file.
|
|
|
|
::: warning Notes
|
|
|
|
- The theme configuration file only supports hot-reload for specific fields.
|
|
- Avoid reconfiguring fields in the VuePress configuration file that have already been set in the theme configuration file.
|
|
:::
|
|
|
|
### Custom Configuration File Path
|
|
|
|
If a non-default path is required, it can be specified in the VuePress configuration:
|
|
|
|
```ts title=".vuepress/config.ts" twoslash
|
|
import path from 'node:path'
|
|
import { defineUserConfig } from 'vuepress'
|
|
import { plumeTheme } from 'vuepress-theme-plume'
|
|
|
|
export default defineUserConfig({
|
|
theme: plumeTheme({
|
|
// Custom configuration file path
|
|
configFile: path.join(__dirname, 'custom/config.ts'), // [!code ++]
|
|
}),
|
|
})
|
|
```
|
|
|
|
::: warning Not recommended for beginners; custom paths might cause unexpected issues.
|
|
:::
|
|
|
|
## Page Configuration
|
|
|
|
Using the YAML Frontmatter at the top of the page, the theme can be configured individually for each page:
|
|
|
|
```md {1,5} title="article.md"
|
|
---
|
|
title: Article Title
|
|
createTime: 2024/09/08 22:53:34
|
|
permalink: /article/xxx/
|
|
---
|
|
```
|
|
|
|
The section wrapped by the `---` delimiters at the top of a Markdown file is the Frontmatter, which uses YAML syntax for configuration.
|
|
|
|
:::tip For an introduction to basic YAML syntax, please refer to [this blog post](/article/ecxnxxd0/)
|
|
:::
|