サイト設定
サイト設定では、サイトのグローバル設定を定義できます。アプリ設定オプションは、使用しているテーマに関係なく、すべてのVitePressサイトに適用される設定を定義します。たとえば、ベースディレクトリやサイトのタイトルなどです。
概要
設定の解決
設定ファイルは常に`<root>/.vitepress/config.[ext]`から解決されます。ここで`<root>`はVitePressのプロジェクトルート、`[ext]`はサポートされているファイル拡張子のいずれかです。TypeScriptはすぐに使用できます。サポートされている拡張子には、`.js`、`.ts`、`.mjs`、`.mts`が含まれます。
設定ファイルではESモジュール構文を使用することをお勧めします。設定ファイルはオブジェクトをデフォルトエクスポートする必要があります。
export default {
// app level config options
lang: 'en-US',
title: 'VitePress',
description: 'Vite & Vue powered static site generator.',
...
}
動的(非同期)設定
設定を動的に生成する必要がある場合は、関数をデフォルトエクスポートすることもできます。例:
import { defineConfig } from 'vitepress'
export default async () => {
const posts = await (await fetch('https://my-cms.com/blog-posts')).json()
return defineConfig({
// app level config options
lang: 'en-US',
title: 'VitePress',
description: 'Vite & Vue powered static site generator.',
// theme level config options
themeConfig: {
sidebar: [
...posts.map((post) => ({
text: post.name,
link: `/posts/${post.name}`
}))
]
}
})
}
トップレベルの`await`を使用することもできます。例:
import { defineConfig } from 'vitepress'
const posts = await (await fetch('https://my-cms.com/blog-posts')).json()
export default defineConfig({
// app level config options
lang: 'en-US',
title: 'VitePress',
description: 'Vite & Vue powered static site generator.',
// theme level config options
themeConfig: {
sidebar: [
...posts.map((post) => ({
text: post.name,
link: `/posts/${post.name}`
}))
]
}
})
設定インテリセンス
`defineConfig`ヘルパーを使用すると、設定オプションのTypeScript対応インテリセンスが提供されます。IDEがサポートしている場合、JavaScriptとTypeScriptの両方で動作します。
import { defineConfig } from 'vitepress'
export default defineConfig({
// ...
})
型付きテーマ設定
デフォルトでは、`defineConfig`ヘルパーはデフォルトテーマからテーマ設定の型を期待します。
import { defineConfig } from 'vitepress'
export default defineConfig({
themeConfig: {
// Type is `DefaultTheme.Config`
}
})
カスタムテーマを使用していて、テーマ設定の型チェックが必要な場合は、代わりに`defineConfigWithTheme`を使用し、ジェネリック引数を使用してカスタムテーマの設定型を渡す必要があります。
import { defineConfigWithTheme } from 'vitepress'
import type { ThemeConfig } from 'your-theme'
export default defineConfigWithTheme<ThemeConfig>({
themeConfig: {
// Type is `ThemeConfig`
}
})
Vite、Vue、Markdown設定
Vite
VitePressの設定でviteオプションを使用して、基となるViteインスタンスを設定できます。個別のVite設定ファイルを作成する必要はありません。
Vue
VitePressには既にViteの公式Vueプラグイン(@vitejs/plugin-vue)が含まれています。VitePressの設定でvueオプションを使用して、そのオプションを設定できます。
Markdown
VitePressの設定でmarkdownオプションを使用して、基となるMarkdown-Itインスタンスを設定できます。
サイトメタデータ
title
- 型: `string`
- デフォルト: `VitePress`
- フロントマターを介してページごとに上書きできます。
サイトのタイトル。デフォルトテーマを使用している場合、これはナビゲーションバーに表示されます。
また、titleTemplate
が定義されていない限り、すべての個々のページタイトルのデフォルトのサフィックスとしても使用されます。個々のページの最終的なタイトルは、最初の<h1>
ヘッダーのテキストコンテンツと、グローバルtitle
をサフィックスとして組み合わせたものになります。次の設定とページコンテンツの場合:
export default {
title: 'My Awesome Site'
}
# Hello
ページのタイトルは`Hello | My Awesome Site`になります。
titleTemplate
- 型: `string | boolean`
- フロントマターを介してページごとに上書きできます。
各ページのタイトルのサフィックスまたはタイトル全体をカスタマイズできます。例:
export default {
title: 'My Awesome Site',
titleTemplate: 'Custom Suffix'
}
# Hello
ページのタイトルは`Hello | Custom Suffix`になります。
タイトルのレンダリング方法を完全にカスタマイズするには、titleTemplate
で`:title`記号を使用できます。
export default {
titleTemplate: ':title - Custom Suffix'
}
ここでは、`:title`はページの最初の<h1>
ヘッダーから推測されたテキストに置き換えられます。前の例のページのタイトルは`Hello - Custom Suffix`になります。
タイトルのサフィックスを無効にするには、このオプションを`false`に設定できます。
description
- 型: `string`
- デフォルト: `A VitePress site`
- フロントマターを介してページごとに上書きできます。
サイトの説明。これはページのHTMLで<meta>
タグとしてレンダリングされます。
export default {
description: 'A VitePress site'
}
head
- 型: `HeadConfig[]`
- デフォルト: `[]`
- フロントマターを介してページごとに追加できます。
ページのHTMLの<head>
タグでレンダリングする追加の要素。ユーザーが追加したタグは、VitePressのタグの後、閉じているhead
タグの前にレンダリングされます。
type HeadConfig =
| [string, Record<string, string>]
| [string, Record<string, string>, string]
例:ファビコンの追加
export default {
head: [['link', { rel: 'icon', href: '/favicon.ico' }]]
} // put favicon.ico in public directory, if base is set, use /base/favicon.ico
/* Would render:
<link rel="icon" href="/favicon.ico">
*/
例:Googleフォントの追加
export default {
head: [
[
'link',
{ rel: 'preconnect', href: 'https://fonts.googleapis.com' }
],
[
'link',
{ rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }
],
[
'link',
{ href: 'https://fonts.googleapis.com/css2?family=Roboto&display=swap', rel: 'stylesheet' }
]
]
}
/* Would render:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
*/
例:サービスワーカーの登録
export default {
head: [
[
'script',
{ id: 'register-sw' },
`;(() => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
}
})()`
]
]
}
/* Would render:
<script id="register-sw">
;(() => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
}
})()
</script>
*/
例:Googleアナリティクスの使用
export default {
head: [
[
'script',
{ async: '', src: 'https://#/gtag/js?id=TAG_ID' }
],
[
'script',
{},
`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');`
]
]
}
/* Would render:
<script async src="https://#/gtag/js?id=TAG_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
*/
lang
- 型: `string`
- デフォルト: `en-US`
サイトのlang属性。これはページのHTMLで<html lang="en-US">
タグとしてレンダリングされます。
export default {
lang: 'en-US'
}
base
- 型: `string`
- デフォルト: `/`
サイトが配置されるベースURL。サイトをサブパス(例:GitHub Pages)に配置する予定がある場合は、これを設定する必要があります。サイトを`https://foo.github.io/bar/`に配置する予定がある場合は、baseを`'/bar/'`に設定する必要があります。常にスラッシュで始まり、スラッシュで終わる必要があります。
baseは、他のオプションで`/`で始まるすべてのURLの前に自動的に追加されるため、一度だけ指定する必要があります。
export default {
base: '/base/'
}
ルーティング
cleanUrls
- 型: `boolean`
- デフォルト: `false`
`true`に設定すると、VitePressはURLから末尾の`.html`を削除します。クリーンURLの生成も参照してください。
サーバーサポートが必要
これを有効にするには、ホスティングプラットフォームで追加の設定が必要になる場合があります。機能させるには、サーバーは` /foo`にアクセスするときに` /foo.html`を提供できる必要があります(**リダイレクトなし**)。
rewrites
- 型: `Record<string, string>`
カスタムディレクトリ<->URLマッピングを定義します。ルーティング:ルートの書き換えの詳細を参照してください。
export default {
rewrites: {
'source/:page': 'destination/:page'
}
}
ビルド
srcDir
- 型: `string`
- デフォルト: `.`
Markdownページが格納されているディレクトリ(プロジェクトルートを基準とする相対パス)。ルートとソースディレクトリも参照してください。
export default {
srcDir: './src'
}
srcExclude
- 型: `string`
- デフォルト: `undefined`
ソースコンテンツとして除外する必要があるMarkdownファイルに一致するglobパターン。
export default {
srcExclude: ['**/README.md', '**/TODO.md']
}
outDir
- 型: `string`
- デフォルト: `./.vitepress/dist`
サイトのビルド出力場所(プロジェクトルートを基準とする相対パス)。
export default {
outDir: '../public'
}
assetsDir
- 型: `string`
- デフォルト: `assets`
生成されたアセットをネストするディレクトリを指定します。このパスはoutDir
内にあり、それに対して解決されます。
export default {
assetsDir: 'static'
}
cacheDir
- 型: `string`
- デフォルト: `./.vitepress/cache`
キャッシュファイルのディレクトリ(プロジェクトルートを基準とする相対パス)。cacheDirも参照してください。
export default {
cacheDir: './.vitepress/.vite'
}
ignoreDeadLinks
- 型: `boolean | 'localhostLinks' | (string | RegExp | ((link: string) => boolean))[]`
- デフォルト: `false`
`true`に設定すると、VitePressは壊れたリンクによってビルドが失敗しなくなります。
`'localhostLinks'`に設定すると、壊れたリンクでビルドは失敗しますが、`localhost`リンクはチェックしません。
export default {
ignoreDeadLinks: true
}
正確なURL文字列、正規表現パターン、またはカスタムフィルタ関数の配列にすることもできます。
export default {
ignoreDeadLinks: [
// ignore exact url "/playground"
'/playground',
// ignore all localhost links
/^https?:\/\/localhost/,
// ignore all links include "/repl/""
/\/repl\//,
// custom function, ignore all links include "ignore"
(url) => {
return url.toLowerCase().includes('ignore')
}
]
}
metaChunk 実験的
- 型: `boolean`
- デフォルト: `false`
`true`に設定すると、ページのメタデータを個別のJavaScriptチャンクに抽出します。これにより、各ページのHTMLペイロードが小さくなり、ページのメタデータがキャッシュ可能になり、サイトに多くのページがある場合のサーバー帯域幅が削減されます。
mpa 実験的
- 型: `boolean`
- デフォルト: `false`
true
に設定すると、プロダクションアプリはMPAモードでビルドされます。MPAモードではデフォルトで0kbのJavaScriptしか出荷されませんが、クライアントサイドでのナビゲーションが無効になり、インタラクティブ機能を使用するには明示的にオプトインする必要があります。
テーマ設定
外観
- 型:
boolean | 'dark' | 'force-dark' | import('@vueuse/core').UseDarkOptions
- デフォルト:
true
ダークモードを有効にするかどうか(<html>
要素に.dark
クラスを追加します)。
- このオプションを
true
に設定すると、デフォルトのテーマはユーザーの好みのカラースキームによって決定されます。 - このオプションを
dark
に設定すると、ユーザーが手動で切り替えない限り、デフォルトのテーマはダークになります。 - このオプションを
false
に設定すると、ユーザーはテーマを切り替えることができなくなります。
このオプションは、vitepress-theme-appearance
キーを使用してローカルストレージからユーザー設定を復元するインラインスクリプトを挿入します。これにより、ページがレンダリングされる前に.dark
クラスが適用され、ちらつきを防ぎます。
appearance.initialValue
は'dark' | undefined
のみ可能です。Refやgetterはサポートされていません。
最終更新日
- 型: `boolean`
- デフォルト: `false`
Gitを使用して各ページの最終更新タイムスタンプを取得するかどうか。タイムスタンプは各ページのページデータに含まれ、useData
からアクセスできます。
デフォルトテーマを使用している場合、このオプションを有効にすると、各ページの最終更新時間が表示されます。themeConfig.lastUpdatedText
オプションを使用してテキストをカスタマイズできます。
カスタマイズ
マークダウン
- 型:
MarkdownOption
マークダウンパーサーオプションを設定します。VitePressはパーサーとしてMarkdown-itを、言語構文のハイライトにはShikiを使用します。このオプション内では、ニーズに合わせてさまざまなマークダウン関連オプションを渡すことができます。
export default {
markdown: {...}
}
利用可能なすべてのオプションについては、型宣言とjsdocsを確認してください。
vite
- 型:
import('vite').UserConfig
内部Vite開発サーバー/バンドラーに生のVite設定を渡します。
export default {
vite: {
// Vite config options
}
}
vue
- 型:
import('@vitejs/plugin-vue').Options
内部プラグインインスタンスに生の@vitejs/plugin-vue
オプションを渡します。
export default {
vue: {
// @vitejs/plugin-vue options
}
}
ビルドフック
VitePressビルドフックを使用すると、ウェブサイトに新しい機能と動作を追加できます。
- サイトマップ
- 検索インデックス
- PWA
- テレポート
buildEnd
- 型:
(siteConfig: SiteConfig) => Awaitable<void>
buildEnd
はビルドCLIフックです。ビルド(SSG)が完了した後、VitePress CLIプロセスが終了する前に実行されます。
export default {
async buildEnd(siteConfig) {
// ...
}
}
postRender
- 型:
(context: SSGContext) => Awaitable<SSGContext | void>
postRender
はビルドフックで、SSGレンダリングが完了したときに呼び出されます。これにより、SSG中にテレポートコンテンツを処理できます。
export default {
async postRender(context) {
// ...
}
}
interface SSGContext {
content: string
teleports?: Record<string, string>
[key: string]: any
}
transformHead
- 型:
(context: TransformContext) => Awaitable<HeadConfig[]>
transformHead
は、各ページを生成する前にheadを変換するためのビルドフックです。VitePress設定に静的に追加できないheadエントリを追加できます。追加のエントリを返すだけで、既存のエントリと自動的にマージされます。
警告
context
内のものは変更しないでください。
export default {
async transformHead(context) {
// ...
}
}
interface TransformContext {
page: string // e.g. index.md (relative to srcDir)
assets: string[] // all non-js/css assets as fully resolved public URL
siteConfig: SiteConfig
siteData: SiteData
pageData: PageData
title: string
description: string
head: HeadConfig[]
content: string
}
このフックはサイトを静的に生成する場合にのみ呼び出されます。開発中は呼び出されません。開発中に動的なheadエントリを追加する必要がある場合は、代わりにtransformPageData
フックを使用できます。
export default {
transformPageData(pageData) {
pageData.frontmatter.head ??= []
pageData.frontmatter.head.push([
'meta',
{
name: 'og:title',
content:
pageData.frontmatter.layout === 'home'
? `VitePress`
: `${pageData.title} | VitePress`
}
])
}
}
例:canonical URL <link>
の追加
export default {
transformPageData(pageData) {
const canonicalUrl = `https://example.com/${pageData.relativePath}`
.replace(/index\.md$/, '')
.replace(/\.md$/, '.html')
pageData.frontmatter.head ??= []
pageData.frontmatter.head.push([
'link',
{ rel: 'canonical', href: canonicalUrl }
])
}
}
transformHtml
- 型:
(code: string, id: string, context: TransformContext) => Awaitable<string | void>
transformHtml
は、ディスクに保存する前に各ページのコンテンツを変換するためのビルドフックです。
警告
context
内のものは変更しないでください。また、htmlコンテンツを変更すると、実行時にhydrationの問題が発生する可能性があります。
export default {
async transformHtml(code, id, context) {
// ...
}
}
transformPageData
- 型:
(pageData: PageData, context: TransformPageContext) => Awaitable<Partial<PageData> | { [key: string]: any } | void>
transformPageData
は、各ページのpageData
を変換するためのフックです。pageData
を直接変更するか、変更された値を返し、ページデータにマージできます。
警告
context
内のものは変更しないでください。また、ネットワークリクエストや重い計算(画像の生成など)をフックで行うと、特に開発サーバーのパフォーマンスに影響を与える可能性があることに注意してください。条件付きロジックにはprocess.env.NODE_ENV === 'production'
を確認できます。
export default {
async transformPageData(pageData, { siteConfig }) {
pageData.contributors = await getPageContributors(pageData.relativePath)
}
// or return data to be merged
async transformPageData(pageData, { siteConfig }) {
return {
contributors: await getPageContributors(pageData.relativePath)
}
}
}
interface TransformPageContext {
siteConfig: SiteConfig
}