chore: use rolldown-vite (#4769)

---------

Signed-off-by: Artea <sepush@outlook.com>
Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
pull/4778/head
Artea 4 months ago committed by GitHub
parent e7f9d05c3e
commit 16a0ff895c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,6 +1,7 @@
import { import {
defineConfig, defineConfig,
resolveSiteDataByRoute, resolveSiteDataByRoute,
type ConfigEnv,
type HeadConfig type HeadConfig
} from 'vitepress' } from 'vitepress'
import { import {
@ -12,137 +13,160 @@ import llmstxt from 'vitepress-plugin-llms'
const prod = !!process.env.NETLIFY const prod = !!process.env.NETLIFY
export default defineConfig({ export default (ctx: ConfigEnv) =>
title: 'VitePress', defineConfig({
title: 'VitePress',
rewrites: { rewrites: {
'en/:rest*': ':rest*' 'en/:rest*': ':rest*'
}, },
lastUpdated: true, lastUpdated: true,
cleanUrls: true, cleanUrls: true,
metaChunk: true, metaChunk: true,
markdown: { markdown: {
math: true, math: true,
codeTransformers: [ codeTransformers: [
// We use `[!!code` in demo to prevent transformation, here we revert it back. // We use `[!!code` in demo to prevent transformation, here we revert it back.
{ {
postprocess(code) { postprocess(code) {
return code.replace(/\[\!\!code/g, '[!code') return code.replace(/\[\!\!code/g, '[!code')
}
}
],
config(md) {
// TODO: remove when https://github.com/vuejs/vitepress/issues/4431 is fixed
const fence = md.renderer.rules.fence!
md.renderer.rules.fence = function (tokens, idx, options, env, self) {
const { localeIndex = 'root' } = env
const codeCopyButtonTitle = (() => {
switch (localeIndex) {
case 'es':
return 'Copiar código'
case 'fa':
return 'کپی کد'
case 'ko':
return '코드 복사'
case 'pt':
return 'Copiar código'
case 'ru':
return 'Скопировать код'
case 'zh':
return '复制代码'
default:
return 'Copy code'
}
})()
return fence(tokens, idx, options, env, self).replace(
'<button title="Copy Code" class="copy"></button>',
`<button title="${codeCopyButtonTitle}" class="copy"></button>`
)
} }
md.use(groupIconMdPlugin)
} }
], },
config(md) {
// TODO: remove when https://github.com/vuejs/vitepress/issues/4431 is fixed sitemap: {
const fence = md.renderer.rules.fence! hostname: 'https://vitepress.dev',
md.renderer.rules.fence = function (tokens, idx, options, env, self) { transformItems(items) {
const { localeIndex = 'root' } = env return items.filter((item) => !item.url.includes('migration'))
const codeCopyButtonTitle = (() => {
switch (localeIndex) {
case 'es':
return 'Copiar código'
case 'fa':
return 'کپی کد'
case 'ko':
return '코드 복사'
case 'pt':
return 'Copiar código'
case 'ru':
return 'Скопировать код'
case 'zh':
return '复制代码'
default:
return 'Copy code'
}
})()
return fence(tokens, idx, options, env, self).replace(
'<button title="Copy Code" class="copy"></button>',
`<button title="${codeCopyButtonTitle}" class="copy"></button>`
)
} }
md.use(groupIconMdPlugin) },
}
},
sitemap: { head: [
hostname: 'https://vitepress.dev', [
transformItems(items) { 'link',
return items.filter((item) => !item.url.includes('migration')) { rel: 'icon', type: 'image/svg+xml', href: '/vitepress-logo-mini.svg' }
} ],
}, [
'link',
{ rel: 'icon', type: 'image/png', href: '/vitepress-logo-mini.png' }
],
['meta', { name: 'theme-color', content: '#5f67ee' }],
['meta', { property: 'og:type', content: 'website' }],
['meta', { property: 'og:site_name', content: 'VitePress' }],
[
'meta',
{
property: 'og:image',
content: 'https://vitepress.dev/vitepress-og.jpg'
}
],
['meta', { property: 'og:url', content: 'https://vitepress.dev/' }],
[
'script',
{
src: 'https://cdn.usefathom.com/script.js',
'data-site': 'AZBRSFGG',
'data-spa': 'auto',
defer: ''
}
]
],
/* prettier-ignore */ themeConfig: {
head: [ logo: { src: '/vitepress-logo-mini.svg', width: 24, height: 24 },
['link', { rel: 'icon', type: 'image/svg+xml', href: '/vitepress-logo-mini.svg' }],
['link', { rel: 'icon', type: 'image/png', href: '/vitepress-logo-mini.png' }],
['meta', { name: 'theme-color', content: '#5f67ee' }],
['meta', { property: 'og:type', content: 'website' }],
['meta', { property: 'og:site_name', content: 'VitePress' }],
['meta', { property: 'og:image', content: 'https://vitepress.dev/vitepress-og.jpg' }],
['meta', { property: 'og:url', content: 'https://vitepress.dev/' }],
['script', { src: 'https://cdn.usefathom.com/script.js', 'data-site': 'AZBRSFGG', 'data-spa': 'auto', defer: '' }]
],
themeConfig: { socialLinks: [
logo: { src: '/vitepress-logo-mini.svg', width: 24, height: 24 }, { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
],
socialLinks: [ search: {
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' } provider: 'algolia',
], options: {
appId: '8J64VVRP8K',
apiKey: '52f578a92b88ad6abde815aae2b0ad7c',
indexName: 'vitepress'
}
},
search: { carbonAds: { code: 'CEBDT27Y', placement: 'vuejsorg' }
provider: 'algolia',
options: {
appId: '8J64VVRP8K',
apiKey: '52f578a92b88ad6abde815aae2b0ad7c',
indexName: 'vitepress'
}
}, },
carbonAds: { code: 'CEBDT27Y', placement: 'vuejsorg' } locales: {
}, root: { label: 'English' },
zh: { label: '简体中文' },
pt: { label: 'Português' },
ru: { label: 'Русский' },
es: { label: 'Español' },
ko: { label: '한국어' },
fa: { label: 'فارسی' }
},
locales: { vite: {
root: { label: 'English' }, plugins: [
zh: { label: '简体中文' }, groupIconVitePlugin({
pt: { label: 'Português' }, customIcon: {
ru: { label: 'Русский' }, vitepress: localIconLoader(
es: { label: 'Español' }, import.meta.url,
ko: { label: '한국어' }, '../public/vitepress-logo-mini.svg'
fa: { label: 'فارسی' } ),
}, firebase: 'logos:firebase'
}
}),
prod &&
llmstxt({
workDir: 'en',
ignoreFiles: ['index.md']
})
],
experimental: {
enableNativePlugin: ctx.command === 'build'
}
},
vite: { transformPageData: prod
plugins: [ ? (pageData, ctx) => {
groupIconVitePlugin({ const site = resolveSiteDataByRoute(
customIcon: { ctx.siteConfig.site,
vitepress: localIconLoader( pageData.relativePath
import.meta.url, )
'../public/vitepress-logo-mini.svg' const title = `${pageData.title || site.title} | ${pageData.description || site.description}`
), ;((pageData.frontmatter.head ??= []) as HeadConfig[]).push(
firebase: 'logos:firebase' ['meta', { property: 'og:locale', content: site.lang }],
['meta', { property: 'og:title', content: title }]
)
} }
}), : undefined
prod && })
llmstxt({
workDir: 'en',
ignoreFiles: ['index.md']
})
]
},
transformPageData: prod
? (pageData, ctx) => {
const site = resolveSiteDataByRoute(
ctx.siteConfig.site,
pageData.relativePath
)
const title = `${pageData.title || site.title} | ${pageData.description || site.description}`
;((pageData.frontmatter.head ??= []) as HeadConfig[]).push(
['meta', { property: 'og:locale', content: site.lang }],
['meta', { property: 'og:title', content: title }]
)
}
: undefined
})

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | Public base path (default: `/`) (`string`) | | `--base <path>` | Public base path (default: `/`) (`string`) |
| `--target <target>` | Transpile target (default: `"modules"`) (`string`) | | `--target <target>` | Transpile target (default: `"modules"`) (`string`) |
| `--outDir <dir>` | Output directory relative to **cwd** (default: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | Output directory relative to **cwd** (default: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | Enable/disable minification, or specify minifier to use (default: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | Static asset base64 inline threshold in bytes (default: `4096`) (`number`) | | `--assetsInlineLimit <number>` | Static asset base64 inline threshold in bytes (default: `4096`) (`number`) |
## `vitepress preview` ## `vitepress preview`

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | Ruta de base pública (por defecto: `/`) (`string`) | | `--base <path>` | Ruta de base pública (por defecto: `/`) (`string`) |
| `--target <target>` | Transpilar objetivo (por defecto: `"modules"`) (`string`) | | `--target <target>` | Transpilar objetivo (por defecto: `"modules"`) (`string`) |
| `--outDir <dir>` | Directorio de salida relativo a **cwd** (por defecto: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | Directorio de salida relativo a **cwd** (por defecto: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | Habilitar/desabilitar la minificación, o especifica un minero para usar (por defecto: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | Limitar los bytes para alinear los activos en base 64 (por defecto: `4096`) (`number`) | | `--assetsInlineLimit <number>` | Limitar los bytes para alinear los activos en base 64 (por defecto: `4096`) (`number`) |
## `vitepress preview` ## `vitepress preview`

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | مسیر پایه عمومی (پیش‌فرض: `/`) (`string`) | | `--base <path>` | مسیر پایه عمومی (پیش‌فرض: `/`) (`string`) |
| `--target <target>` | هدف ترنسپایل (پیش‌فرض: `"modules"`) (`string`) | | `--target <target>` | هدف ترنسپایل (پیش‌فرض: `"modules"`) (`string`) |
| `--outDir <dir>` | دایرکتوری خروجی نسبت به **cwd** (پیش‌فرض: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | دایرکتوری خروجی نسبت به **cwd** (پیش‌فرض: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | فعال یا غیرفعال کردن فشرده‌سازی، یا تعیین فشرده‌سازی برای استفاده (پیش‌فرض: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | آستانه تبدیل پایه ۶۴ استاتیک به بایت (پیش‌فرض: `4096`) (`number`) | | `--assetsInlineLimit <number>` | آستانه تبدیل پایه ۶۴ استاتیک به بایت (پیش‌فرض: `4096`) (`number`) |
## `vitepress preview` {#vitepress-preview} ## `vitepress preview` {#vitepress-preview}

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | Public 기본 경로 (기본값: `/`) (`string`) | | `--base <path>` | Public 기본 경로 (기본값: `/`) (`string`) |
| `--target <target>` | 트랜스파일 대상 (기본값: `"modules"`) (`string`) | | `--target <target>` | 트랜스파일 대상 (기본값: `"modules"`) (`string`) |
| `--outDir <dir>` | **cwd** 기준 출력 디렉터리 (기본값: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | **cwd** 기준 출력 디렉터리 (기본값: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | minify 활성화/비활성화 또는 사용할 minify 도구 지정 (기본값: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>`| 바이트 단위의 정적 에셋 base64 인라인 임계값 (기본값: `4096`) (`number`) | | `--assetsInlineLimit <number>`| 바이트 단위의 정적 에셋 base64 인라인 임계값 (기본값: `4096`) (`number`) |
## `vitepress preview` ## `vitepress preview`

@ -13,9 +13,9 @@
"@lunariajs/core": "^0.1.1", "@lunariajs/core": "^0.1.1",
"markdown-it-mathjax3": "^4.3.2", "markdown-it-mathjax3": "^4.3.2",
"open-cli": "^8.0.0", "open-cli": "^8.0.0",
"postcss-rtlcss": "^5.7.0", "postcss-rtlcss": "^5.7.1",
"vitepress": "workspace:*", "vitepress": "workspace:*",
"vitepress-plugin-group-icons": "^1.5.2", "vitepress-plugin-group-icons": "^1.5.5",
"vitepress-plugin-llms": "^1.1.3" "vitepress-plugin-llms": "^1.3.4"
} }
} }

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | Caminho base público (padrão: `/`) (`string`) | | `--base <path>` | Caminho base público (padrão: `/`) (`string`) |
| `--target <target>` | Transpila o alvo (padrão: `"modules"`) (`string`) | | `--target <target>` | Transpila o alvo (padrão: `"modules"`) (`string`) |
| `--outDir <dir>` | Diretório de saída relativo ao **cwd** (padrão: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | Diretório de saída relativo ao **cwd** (padrão: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | Habilita/desabilita minificação, ou especifica um minificador para usar (padrão: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | Limite em bytes para alinhar ativos em base64 (padrão: `4096`) (`number`) | | `--assetsInlineLimit <number>` | Limite em bytes para alinhar ativos em base64 (padrão: `4096`) (`number`) |
## `vitepress preview` ## `vitepress preview`

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | Публичный базовый путь (по умолчанию: `/`) (`string`) | | `--base <path>` | Публичный базовый путь (по умолчанию: `/`) (`string`) |
| `--target <target>` | Транспилировать цель (по умолчанию: `"modules"`) (`string`) | | `--target <target>` | Транспилировать цель (по умолчанию: `"modules"`) (`string`) |
| `--outDir <dir>` | Выходной каталог относительно **cwd** (по умолчанию: `<root>/.vitepress/dist`) (`string`) | | `--outDir <dir>` | Выходной каталог относительно **cwd** (по умолчанию: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | Включить/выключить минификацию или задать используемый минификатор (по умолчанию: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | Статический встроенный порог ресурса base64 в байтах (по умолчанию: `4096`) (`number`) | | `--assetsInlineLimit <number>` | Статический встроенный порог ресурса base64 в байтах (по умолчанию: `4096`) (`number`) |
## `vitepress preview` {#vitepress-preview} ## `vitepress preview` {#vitepress-preview}

@ -43,7 +43,6 @@ vitepress build [root]
| `--base <path>` | public base URL (默认值: `/`) (`string`) | | `--base <path>` | public base URL (默认值: `/`) (`string`) |
| `--target <target>` | 转译目标 (默认值:`"modules"`) (`string`) | | `--target <target>` | 转译目标 (默认值:`"modules"`) (`string`) |
| `--outDir <dir>` | 输出目录 (默认值:`.vitepress/dist`) (`string`) | | `--outDir <dir>` | 输出目录 (默认值:`.vitepress/dist`) (`string`) |
| `--minify [minifier]` | 启用/禁用压缩,或指定要使用的压缩程序 (默认值:`"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | 静态资源 base64 内联阈值(以字节为单位)(默认值:`4096`) (`number`) | | `--assetsInlineLimit <number>` | 静态资源 base64 内联阈值(以字节为单位)(默认值:`4096`) (`number`) |
## `vitepress preview` ## `vitepress preview`

@ -97,21 +97,21 @@
"dependencies": { "dependencies": {
"@docsearch/css": "^3.9.0", "@docsearch/css": "^3.9.0",
"@docsearch/js": "^3.9.0", "@docsearch/js": "^3.9.0",
"@iconify-json/simple-icons": "^1.2.33", "@iconify-json/simple-icons": "^1.2.36",
"@shikijs/core": "^3.4.0", "@shikijs/core": "^3.4.2",
"@shikijs/transformers": "^3.4.0", "@shikijs/transformers": "^3.4.2",
"@shikijs/types": "^3.4.0", "@shikijs/types": "^3.4.2",
"@vitejs/plugin-vue": "^5.2.4", "@vitejs/plugin-vue": "^5.2.4",
"@vue/devtools-api": "^7.7.6", "@vue/devtools-api": "^7.7.6",
"@vue/shared": "^3.5.13", "@vue/shared": "^3.5.16",
"@vueuse/core": "^13.1.0", "@vueuse/core": "^13.3.0",
"@vueuse/integrations": "^13.1.0", "@vueuse/integrations": "^13.3.0",
"focus-trap": "^7.6.4", "focus-trap": "^7.6.5",
"mark.js": "8.11.1", "mark.js": "8.11.1",
"minisearch": "^7.1.2", "minisearch": "^7.1.2",
"shiki": "^3.4.0", "shiki": "^3.4.2",
"vite": "^6.3.5", "vite": "^6.3.5",
"vue": "^3.5.13" "vue": "^3.5.16"
}, },
"devDependencies": { "devDependencies": {
"@clack/prompts": "^1.0.0-alpha.0", "@clack/prompts": "^1.0.0-alpha.0",
@ -139,20 +139,20 @@
"@types/markdown-it-container": "^2.0.10", "@types/markdown-it-container": "^2.0.10",
"@types/markdown-it-emoji": "^3.0.1", "@types/markdown-it-emoji": "^3.0.1",
"@types/minimist": "^1.2.5", "@types/minimist": "^1.2.5",
"@types/node": "^22.15.17", "@types/node": "^22.15.29",
"@types/picomatch": "^4.0.0", "@types/picomatch": "^4.0.0",
"@types/postcss-prefix-selector": "^1.16.3", "@types/postcss-prefix-selector": "^1.16.3",
"@types/prompts": "^2.4.9", "@types/prompts": "^2.4.9",
"chokidar": "^4.0.3", "chokidar": "^4.0.3",
"conventional-changelog-cli": "^5.0.0", "conventional-changelog-cli": "^5.0.0",
"cross-spawn": "^7.0.6", "cross-spawn": "^7.0.6",
"debug": "^4.4.0", "debug": "^4.4.1",
"esbuild": "^0.25.4", "esbuild": "^0.25.5",
"execa": "^9.5.3", "execa": "^9.6.0",
"fs-extra": "^11.3.0", "fs-extra": "^11.3.0",
"get-port": "^7.1.0", "get-port": "^7.1.0",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"lint-staged": "^15.5.2", "lint-staged": "^16.1.0",
"lodash.template": "^4.5.0", "lodash.template": "^4.5.0",
"lru-cache": "^11.1.0", "lru-cache": "^11.1.0",
"markdown-it": "^14.1.0", "markdown-it": "^14.1.0",
@ -165,7 +165,7 @@
"minimist": "^1.2.8", "minimist": "^1.2.8",
"nanoid": "^5.1.5", "nanoid": "^5.1.5",
"ora": "^8.2.0", "ora": "^8.2.0",
"oxc-minify": "^0.69.0", "oxc-minify": "^0.72.2",
"p-map": "^7.0.3", "p-map": "^7.0.3",
"path-to-regexp": "^6.3.0", "path-to-regexp": "^6.3.0",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -178,22 +178,22 @@
"prompts": "^2.4.2", "prompts": "^2.4.2",
"punycode": "^2.3.1", "punycode": "^2.3.1",
"rimraf": "^6.0.1", "rimraf": "^6.0.1",
"rollup": "^4.40.2", "rollup": "^4.41.1",
"rollup-plugin-dts": "6.1.1", "rollup-plugin-dts": "6.1.1",
"rollup-plugin-esbuild": "^6.2.1", "rollup-plugin-esbuild": "^6.2.1",
"semver": "^7.7.1", "semver": "^7.7.2",
"simple-git-hooks": "^2.13.0", "simple-git-hooks": "^2.13.0",
"sirv": "^3.0.1", "sirv": "^3.0.1",
"sitemap": "^8.0.0", "sitemap": "^8.0.0",
"tinyglobby": "^0.2.13", "tinyglobby": "^0.2.14",
"typescript": "^5.8.3", "typescript": "^5.8.3",
"vitest": "^3.1.3", "vitest": "^3.1.4",
"vue-tsc": "^3.0.0-alpha.6", "vue-tsc": "^3.0.0-alpha.8",
"wait-on": "^8.0.3" "wait-on": "^8.0.3"
}, },
"peerDependencies": { "peerDependencies": {
"markdown-it-mathjax3": "^4", "markdown-it-mathjax3": "^4",
"oxc-minify": "^0.69.0", "oxc-minify": "^0.72.2",
"postcss": "^8" "postcss": "^8"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
@ -207,7 +207,7 @@
"optional": true "optional": true
} }
}, },
"packageManager": "pnpm@10.10.0", "packageManager": "pnpm@10.11.0",
"pnpm": { "pnpm": {
"peerDependencyRules": { "peerDependencyRules": {
"ignoreMissing": [ "ignoreMissing": [
@ -217,7 +217,8 @@
] ]
}, },
"overrides": { "overrides": {
"ora>string-width": "^5" "ora>string-width": "^5",
"vite": "npm:rolldown-vite@latest"
}, },
"patchedDependencies": { "patchedDependencies": {
"@types/mdurl@2.0.0": "patches/@types__mdurl@2.0.0.patch", "@types/mdurl@2.0.0": "patches/@types__mdurl@2.0.0.patch",

File diff suppressed because it is too large Load Diff

@ -33,7 +33,7 @@ const plugins = [
}), }),
commonjs(), commonjs(),
nodeResolve({ preferBuiltins: false }), nodeResolve({ preferBuiltins: false }),
esbuild({ target: 'node18' }), esbuild({ target: 'node20' }),
json() json()
] ]

@ -88,7 +88,6 @@ export async function bundle(
emptyOutDir: true, emptyOutDir: true,
ssr, ssr,
ssrEmitAssets: config.mpa, ssrEmitAssets: config.mpa,
// minify with esbuild in MPA mode (for CSS)
minify: ssr ? !!config.mpa : (options.minify ?? !process.env.DEBUG), minify: ssr ? !!config.mpa : (options.minify ?? !process.env.DEBUG),
outDir: ssr ? config.tempDir : config.outDir, outDir: ssr ? config.tempDir : config.outDir,
cssCodeSplit: false, cssCodeSplit: false,

@ -34,6 +34,7 @@ const debug = _debug('vitepress:config')
const resolve = (root: string, file: string) => const resolve = (root: string, file: string) =>
normalizePath(path.resolve(root, `.vitepress`, file)) normalizePath(path.resolve(root, `.vitepress`, file))
export type { ConfigEnv }
export type UserConfigFn<ThemeConfig> = ( export type UserConfigFn<ThemeConfig> = (
env: ConfigEnv env: ConfigEnv
) => Awaitable<UserConfig<ThemeConfig>> ) => Awaitable<UserConfig<ThemeConfig>>

Loading…
Cancel
Save