import{_ as e,c as h,ag as t,j as i,a,G as l,B as p,o as k}from"./chunks/framework.C1C4sYC0.js";const m=JSON.parse('{"title":"تنظیمات سایت","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"fa/reference/site-config.md","filePath":"fa/reference/site-config.md","lastUpdated":1734087948000}'),d={name:"fa/reference/site-config.md"},r={id:"metachunk",tabindex:"-1"},E={id:"mpa",tabindex:"-1"};function g(o,s,c,y,F,u){const n=p("Badge");return k(),h("div",null,[s[6]||(s[6]=t(`
تنظیمات سایت جایی است که میتوانید تنظیمات جهانی سایت را تعریف کنید. گزینههای تنظیمات برنامه شامل تنظیماتی است که برای هر سایت ویتپرس اعمال میشود، صرف نظر از اینکه از چه تمی استفاده میکند. برای مثال، دایرکتوری پایه یا عنوان سایت.
فایل تنظیمات همیشه از <root>/.vitepress/config.[ext] رفع میشود، جایی که <root> ریشه پروژه ویتپرس شما است و [ext] یکی از پسوندهای فایل پشتیبانی شده است. تایپاسکریپت به طور پیشفرض پشتیبانی میشود. پسوندهای پشتیبانی شده شامل .js, .ts, .mjs و .mts هستند.
توصیه میشود از سینتکس ماژولهای ES در فایلهای تنظیمات استفاده کنید. فایل تنظیمات باید به طور پیشفرض یک شیء صادر کند:
export default {
// گزینههای تنظیمات سطح برنامه
lang: 'en-US',
title: 'ویتپرس',
description: 'مولد سایت استاتیک توسط Vite & Vue.',
...
}اگر نیاز دارید به طور پویا تنظیمات را تولید کنید، میتوانید یک تابع صادر کنید. به عنوان مثال:
import { defineConfig } from 'vitepress'
export default async () => {
const posts = await (await fetch('https://my-cms.com/blog-posts')).json()
return defineConfig({
// گزینههای تنظیمات سطح برنامه
lang: 'en-US',
title: 'ویتپرس',
description: 'مولد سایت استاتیک توسط Vite & Vue.',
// گزینههای تنظیمات سطح تم
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({
// گزینههای تنظیمات سطح برنامه
lang: 'en-US',
title: 'ویتپرس',
description: 'مولد سایت استاتیک توسط Vite & Vue.',
// گزینههای تنظیمات سطح تم
themeConfig: {
sidebar: [
...posts.map((post) => ({
text: post.name,
link: \`/posts/\${post.name}\`
}))
]
}
})استفاده از تابع defineConfig هوشمندی تایپاسکریپت را برای گزینههای تنظیمات فراهم میکند. فرض کنید IDE شما از آن پشتیبانی میکند، این باید هم در جاوااسکریپت و هم تایپاسکریپت کار کند.
import { defineConfig } from 'vitepress'
export default defineConfig({
// ...
})به طور پیشفرض، تابع defineConfig انتظار دارد نوع تنظیمات تم از تم پیشفرض باشد:
import { defineConfig } from 'vitepress'
export default defineConfig({
themeConfig: {
// نوع \`DefaultTheme.Config\`
}
})اگر از تم سفارشی استفاده میکنید و میخواهید بررسی نوع برای تنظیمات تم داشته باشید، باید به جای آن از defineConfigWithTheme استفاده کنید و نوع تنظیمات تم سفارشی خود را از طریق یک آرگومان جنریک منتقل کنید:
import { defineConfigWithTheme } from 'vitepress'
import type { ThemeConfig } from 'your-theme'
export default defineConfigWithTheme<ThemeConfig>({
themeConfig: {
// نوع \`ThemeConfig\`
}
})Vite
شما میتوانید نمونه پایه Vite را با استفاده از گزینه vite در تنظیمات ویتپرس خود پیکربندی کنید. نیازی به ایجاد فایل تنظیمات Vite جداگانه نیست.
Vue
ویتپرس از قبل پلاگین رسمی Vue برای Vite (@vitejs/plugin-vue) را شامل میشود. شما میتوانید گزینههای آن را با استفاده از گزینه vue در تنظیمات ویتپرس خود پیکربندی کنید.
Markdown
شما میتوانید نمونه پایه Markdown-It را با استفاده از گزینه markdown در تنظیمات ویتپرس خود پیکربندی کنید.
stringویتپرسعنوان سایت. هنگامی که از تم پیشفرض استفاده میکنید، این در نوار ناوبری نمایش داده میشود.
همچنین به عنوان پسوند پیشفرض برای تمام عناوین صفحات فردی استفاده میشود، مگر اینکه titleTemplate تعریف شده باشد. عنوان نهایی صفحهای به محتوای متنی اولین هدر <h1> آن صفحه ترکیب میشود با title جهانی به عنوان پسوند. به عنوان مثال با تنظیمات زیر و محتوای صفحه:
export default {
title: 'سایت فوقالعاده من'
}# سلامعنوان صفحه خواهد بود سلام | سایت فوقالعاده من.
string | booleanاجازه میدهد پسوند عنوان هر صفحه یا کل عنوان را سفارشی کنید. به عنوان مثال:
export default {
title: 'سایت فوقالعاده من',
titleTemplate: 'پسوند سفارشی'
}# سلامعنوان صفحه خواهد بود سلام | پسوند سفارشی.
برای سفارشی کردن کامل نحوه نمایش عنوان، میتوانید از نماد :title در titleTemplate استفاده کنید:
export default {
titleTemplate: ':title - پسوند سفارشی'
}اینجا :title با متن استنباط شده از اولین هدر <h1> صفحه جایگزین میشود. عنوان صفحه مثال قبلی خواهد بود سلام - پسوند سفارشی.
این گزینه میتواند به false تنظیم شود تا پسوندهای عنوان غیرفعال شوند.
stringیک سایت ویتپرستوضیحات برای سایت. این به عنوان یک تگ <meta> در HTML صفحه رندر خواهد شد.
export default {
description: 'یک سایت ویتپرس'
}HeadConfig[][]عناصر اضافی برای رندر در تگ <head> در HTML صفحه. تگهای افزوده شده توسط کاربر قبل از بسته شدن تگ head، پس از تگهای ویتپرس رندر میشوند.
type HeadConfig =
| [string, Record<string, string>]
| [string, Record<string, string>, string]export default {
head: [['link', { rel: 'icon', href: '/favicon.ico' }]]
} // favicon.ico را در دایرکتوری عمومی قرار دهید، اگر base تنظیم شده است، از /base/favicon.ico استفاده کنید.
/* رندر خواهد شد:
<link rel="icon" href="/favicon.ico">
*/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' }
]
]
}
/* رندر خواهد شد:
<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')
}
})()\`
]
]
}
/* رندر خواهد شد
:
<script id="register-sw">
;(() => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
}
})()
</script>
*/export default {
head: [
[
'script',
{ async: '', src: 'https://www.googletagmanager.com/gtag/js?id=TAG_ID' }
],
[
'script',
{},
\`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');\`
]
]
}
/* رندر خواهد شد:
<script async src="https://www.googletagmanager.com/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>
*/stringen-USویژگی زبان برای سایت. این به عنوان یک تگ <html lang="en-US"> در HTML صفحه رندر خواهد شد.
export default {
lang: 'en-US'
}string/آدرس پایهای که سایت در آن مستقر خواهد شد. اگر قصد دارید سایت خود را در یک مسیر فرعی مستقر کنید، باید این تنظیم را انجام دهید، به عنوان مثال، صفحات GitHub. اگر قصد دارید سایت خود را در https://foo.github.io/bar/ مستقر کنید، باید پایه را به '/bar/' تنظیم کنید. این باید همیشه با یک اسلش شروع و پایان یابد.
پایه به طور خودکار به تمام آدرسهای URL که با / شروع میشوند در سایر گزینهها اضافه میشود، بنابراین فقط باید آن را یک بار مشخص کنید.
export default {
base: '/base/'
}booleanfalseوقتی تنظیم شود به true، ویتپرس .html انتهایی را از URL ها حذف میکند. همچنین ببینید تولید URL تمیز.
::: هشدار نیاز به پشتیبانی سرور فعال کردن این ممکن است نیاز به پیکربندی اضافی در پلتفرم میزبان شما داشته باشد. برای اینکه کار کند، سرور شما باید بتواند /foo.html را زمانی که /foo بازدید میشود بدون ریدایرکت سرو کند. :::
Record<string, string>تعریف نقشهبرداریهای سفارشی دایرکتوری <-> URL. جزئیات بیشتر را در مسیریابی: بازنویسی مسیرها ببینید.
export default {
rewrites: {
'source/:page': 'destination/:page'
}
}string.دایرکتوری که صفحات مارکداون شما در آن ذخیره شدهاند، نسبت به ریشه پروژه. همچنین ببینید دایرکتوری ریشه و منبع.
export default {
srcDir: './src'
}stringundefinedیک الگوی glob برای تطبیق فایلهای مارکداون که باید به عنوان محتوای منبع حذف شوند.
export default {
srcExclude: ['**/README.md', '**/TODO.md']
}string./.vitepress/distمکان خروجی ساخت برای سایت، نسبت به ریشه پروژه.
export default {
outDir: '../public'
}stringassetsدایرکتوری برای قرار دادن داراییهای تولید شده را مشخص کنید. مسیر باید داخل outDir باشد و نسبت به آن حل شود.
export default {
assetsDir: 'static'
}string./.vitepress/cacheدایرکتوری برای فایلهای کش، نسبت به ریشه پروژه. همچنین ببینید: cacheDir.
export default {
cacheDir: './.vitepress/.vite'
}boolean | 'localhostLinks' | (string | RegExp | ((link: string) => boolean))[]falseزمانی که به true تنظیم شود، ویتپرس به دلیل لینکهای مرده ساختها را شکست نخواهد داد.
وقتی به 'localhostLinks' تنظیم شود، ساخت بر روی لینکهای مرده شکست خواهد خورد، اما لینکهای localhost بررسی نخواهند شد.
export default {
ignoreDeadLinks: true
}همچنین میتواند یک آرایه از رشتههای URL دقیق، الگوهای رگکس، یا توابع فیلتر سفارشی باشد.
export default {
ignoreDeadLinks: [
// نادیده گرفتن URL دقیق "/playground"
'/playground',
// نادیده گرفتن همه لینکهای localhost
/^https?:\\/\\/localhost/,
// نادیده گرفتن همه لینکهای شامل "/repl/""
/\\/repl\\//,
// تابع سفارشی، نادیده گرفتن همه لینکهای شامل "ignore"
(url) => {
return url.toLowerCase().includes('ignore')
}
]
}booleanfalseزمانی که به true تنظیم شود، اپلیکیشن تولید شده در حالت MPA ساخته خواهد شد. حالت MPA به طور پیشفرض 0 کیلوبایت جاوااسکریپت ارسال میکند، به هزینه غیرفعال کردن ناوبری سمت کاربر و نیاز به opt-in صریح برای تعامل.
boolean | 'dark' | 'force-dark' | 'force-auto' | import('@vueuse/core').UseDarkOptionstrueآیا حالت تاریک فعال شود یا نه (با اضافه کردن کلاس .dark به عنصر <html>).
true تنظیم شود، تم پیشفرض با توجه به طرح رنگ مورد نظر کاربر تعیین میشود.dark تنظیم شود، تم به صورت پیشفرض تاریک خواهد بود، مگر اینکه کاربر آن را به صورت دستی تغییر دهد.false تنظیم شود، کاربران قادر به تغییر تم نخواهند بود.force-dark تنظیم شود، تم همیشه تاریک خواهد بود و کاربران نمیتوانند آن را تغییر دهند.force-auto تنظیم شود، تم همیشه با توجه به طرح رنگ مورد نظر کاربر تعیین میشود و کاربران نمیتوانند آن را تغییر دهند.این گزینه یک اسکریپت داخلی تزریق میکند که تنظیمات کاربران را از حافظه محلی با استفاده از کلید vitepress-theme-appearance بازیابی میکند. این اطمینان حاصل میشود که کلاس .dark قبل از رندر شدن صفحه اعمال میشود تا از پرش جلوگیری شود.
appearance.initialValue فقط میتواند dark یا undefined باشد. Refs یا getters پشتیبانی نمیشوند.
booleanfalseآیا زمان آخرین بهروزرسانی برای هر صفحه با استفاده از Git دریافت شود. این زمان در دادههای هر صفحه گنجانده خواهد شد و از طریق useData قابل دسترسی خواهد بود.
وقتی از تم پیشفرض استفاده میکنید، فعال کردن این گزینه زمان آخرین بهروزرسانی هر صفحه را نمایش میدهد. میتوانید متن را از طریق گزینه themeConfig.lastUpdatedText سفارشی کنید.
MarkdownOptionگزینههای پارسر مارکداون را تنظیم کنید. ویتپرس از Markdown-it به عنوان پارسر استفاده میکند و Shiki را برای برجستهسازی نحو زبان استفاده میکند. در داخل این گزینه، میتوانید گزینههای مختلف مرتبط با مارکداون را بر اساس نیازهای خود ارسال کنید.
export default {
markdown: {...}
}برای مشاهده اعلامیه نوع و jsdocs برای همه گزینههای موجود، type declaration and jsdocs را بررسی کنید.
import('vite').UserConfigپیکربندی خام Vite Config را به سرور توسعه داخلی / بستهبند Vite ارسال کنید.
export default {
vite: {
// گزینههای پیکربندی Vite
}
}import('@vitejs/plugin-vue').Optionsگزینههای خام @vitejs/plugin-vue options را به نمونه افزونه داخلی ارسال کنید.
export default {
vue: {
// گزینههای @vitejs/plugin-vue
}
}قلابهای ساخت ویتپرس به شما امکان اضافه کردن عملکرد و رفتارهای جدید به وبسایت خود را میدهند:
(siteConfig: SiteConfig) => Awaitable<void>buildEnd یک قلاب CLI ساخت است، که بعد از اتمام ساخت (SSG) اجرا میشود اما قبل از خروج از فرآیند CLI ویتپرس.
export default {
async buildEnd(siteConfig) {
// ...
}
}(context: SSGContext) => Awaitable<SSGContext | void>postRender یک قلاب ساخت است که زمانی که رندر SSG انجام شد، فراخوانی میشود. این امکان را به شما میدهد که محتوای teleports را در حین SSG مدیریت کنید.
export default {
async postRender(context) {
// ...
}
}interface SSGContext {
content: string
teleports?: Record<string, string>
[key: string]: any
}(context: TransformContext) => Awaitable<HeadConfig[]>transformHead یک قلاب ساخت است که برای تغییر head قبل از تولید هر صفحه استفاده میشود. این امکان را به شما میدهد که ورودیهای head اضافه کنید که نمیتوانند به صورت استاتیک به تنظیمات ویتپرس اضافه شوند. شما فقط باید ورودیهای اضافی را برگردانید، آنها به صورت خودکار با موارد موجود ترکیب میشوند.
هشدار
هیچچیزی را در داخل context تغییر ندهید.
export default {
async transform
Head(context) {
// ...
}
}interface TransformContext {
page: string // به عنوان مثال index.md (نسبت به srcDir)
assets: string[] // همه داراییهای غیر js/css به عنوان 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'
? \`ویتپرس\`
: \`\${pageData.title} | ویتپرس\`
}
])
}
}<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 }
])
}
}(code: string, id: string, context: TransformContext) => Awaitable<string | void>transformHtml یک قلاب ساخت است که برای تغییر محتوای هر صفحه قبل از ذخیره به دیسک استفاده میشود.
هشدار
هیچچیزی را در داخل context تغییر ندهید. همچنین، تغییر محتوای html ممکن است باعث مشکلات هیدراتاسیون در زمان اجرا شود.
export default {
async transformHtml(code, id, context) {
// ...
}
}(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)
}
// یا دادهها را برای ادغام برگردانید
async transformPageData(pageData, { siteConfig }) {
return {
contributors: await getPageContributors(pageData.relativePath)
}
}
}interface TransformPageContext {
siteConfig: SiteConfig
}