diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 1c88eff6..6981f2f4 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -5,78 +5,35 @@ import { defineConfig } from 'vitepress' import { transformerTwoslash } from '@shikijs/vitepress-twoslash' import { groupIconMdPlugin, - groupIconVitePlugin, + groupIconVitePlugin } from 'vitepress-plugin-group-icons' -import type { PluginOption } from 'vite' import { markdownItImageSize } from 'markdown-it-image-size' +import packageJson from '../package.json' with { type: 'json' } import { buildEnd } from './buildEnd.config' +const viteVersion = packageJson.version +const viteMajorVersion = +viteVersion.split('.')[0] + const ogDescription = 'Next Generation Frontend Tooling' const ogImage = 'https://vite.dev/og-image.jpg' const ogTitle = 'Vite' const ogUrl = 'https://vite.dev' // netlify envs -const deployURL = process.env.DEPLOY_PRIME_URL || '' const commitRef = process.env.COMMIT_REF?.slice(0, 8) || 'dev' -const deployType = (() => { - switch (deployURL) { - case 'https://main--vite-docs-main.netlify.app': - return 'main' - case '': - return 'local' - default: - return 'release' - } -})() -const additionalTitle = ((): string => { - switch (deployType) { - case 'main': - return ' (main branch)' - case 'local': - return ' (local)' - case 'release': - return '' - } -})() const versionLinks = ((): DefaultTheme.NavItemWithLink[] => { - const oldVersions: DefaultTheme.NavItemWithLink[] = [ - { - text: 'Vite 6 Docs', - link: 'https://v6.vite.dev', - }, - { - text: 'Vite 5 Docs', - link: 'https://v5.vite.dev', - }, - { - text: 'Vite 4 Docs', - link: 'https://v4.vite.dev', - }, - { - text: 'Vite 3 Docs', - link: 'https://v3.vite.dev', - }, - { - text: 'Vite 2 Docs', - link: 'https://v2.vite.dev', - }, - ] + const links: DefaultTheme.NavItemWithLink[] = [] - switch (deployType) { - case 'main': - case 'local': - return [ - { - text: 'Vite 7 Docs (release)', - link: 'https://vite.dev', - }, - ...oldVersions, - ] - case 'release': - return oldVersions + // Create version links from v2 onwards + for (let i = viteMajorVersion - 1; i >= 2; i--) { + links.push({ + text: `Vite ${i} Docs`, + link: `https://v${i}.vite.dev` + }) } + + return links })() function inlineScript(file: string): HeadConfig { @@ -85,8 +42,8 @@ function inlineScript(file: string): HeadConfig { {}, fs.readFileSync( path.resolve(__dirname, `./inlined-scripts/${file}`), - 'utf-8', - ), + 'utf-8' + ) ] } @@ -99,7 +56,7 @@ export default defineConfig({ ['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }], [ 'link', - { rel: 'alternate', type: 'application/rss+xml', href: '/blog.rss' }, + { rel: 'alternate', type: 'application/rss+xml', href: '/blog.rss' } ], ['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }], [ @@ -107,23 +64,23 @@ export default defineConfig({ { rel: 'preconnect', href: 'https://fonts.gstatic.com', - crossorigin: 'true', - }, + crossorigin: 'true' + } ], [ 'link', { rel: 'preload', href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Manrope:wght@600&family=IBM+Plex+Mono:wght@400&display=swap', - as: 'style', - }, + as: 'style' + } ], [ 'link', { rel: 'stylesheet', - href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Manrope:wght@600&family=IBM+Plex+Mono:wght@400&display=swap', - }, + href: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Manrope:wght@600&family=IBM+Plex+Mono:wght@400&display=swap' + } ], inlineScript('banner.js'), ['link', { rel: 'me', href: 'https://m.webtoo.ls/@vite' }], @@ -142,9 +99,9 @@ export default defineConfig({ src: 'https://cdn.usefathom.com/script.js', 'data-site': 'TPLGJZGR', 'data-spa': 'auto', - defer: '', - }, - ], + defer: '' + } + ] ], locales: { @@ -155,7 +112,7 @@ export default defineConfig({ pt: { label: 'Português', link: 'https://pt.vite.dev' }, ko: { label: '한국어', link: 'https://ko.vite.dev' }, de: { label: 'Deutsch', link: 'https://de.vite.dev' }, - fa: { label: 'فارسی', link: 'https://fa.vite.dev' }, + fa: { label: 'فارسی', link: 'https://fa.vite.dev' } }, themeConfig: { @@ -163,12 +120,12 @@ export default defineConfig({ editLink: { pattern: 'https://github.com/vitejs/docs-cn/edit/main/:path', - text: '为此页提供修改建议', + text: '为此页提供修改建议' }, outline: { label: '本页目录', - level: [2, 3], + level: [2, 3] }, socialLinks: [ @@ -176,7 +133,7 @@ export default defineConfig({ { icon: 'mastodon', link: 'https://elk.zone/m.webtoo.ls/@vite' }, { icon: 'x', link: 'https://x.com/vite_js' }, { icon: 'discord', link: 'https://chat.vite.dev' }, - { icon: 'github', link: 'https://github.com/vitejs/vite' }, + { icon: 'github', link: 'https://github.com/vitejs/vite' } ], search: { @@ -191,10 +148,10 @@ export default defineConfig({ footer: { selectText: '选择', navigateText: '切换', - closeText: '关闭', - }, + closeText: '关闭' + } } - }, + } } }, @@ -211,14 +168,10 @@ export default defineConfig({ footer: { message: `Released under the MIT License. (${commitRef})`, - copyright: - 'Copyright © 2019-present VoidZero Inc. & Vite Contributors' + copyright: 'Copyright © 2019-present VoidZero Inc. & Vite Contributors' }, nav: [ - { - component: 'ReleaseTag' - }, { text: '指引', link: '/guide/', activeMatch: '/guide/' }, { text: '配置', link: '/config/', activeMatch: '/config/' }, { text: '插件', link: '/plugins/', activeMatch: '/plugins/' }, @@ -230,25 +183,25 @@ export default defineConfig({ { text: '发布策略', link: '/releases' }, { text: '纪录片', - link: 'https://www.youtube.com/watch?v=bmWQqAKLgT4', + link: 'https://www.youtube.com/watch?v=bmWQqAKLgT4' }, { items: [ { text: 'Bluesky', - link: 'https://bsky.app/profile/vite.dev', + link: 'https://bsky.app/profile/vite.dev' }, { text: 'Mastodon', - link: 'https://elk.zone/m.webtoo.ls/@vite', + link: 'https://elk.zone/m.webtoo.ls/@vite' }, { text: 'X', - link: 'https://x.com/vite_js', + link: 'https://x.com/vite_js' }, { text: 'Discord 聊天室', - link: 'https://chat.vite.dev', + link: 'https://chat.vite.dev' }, { text: 'Awesome Vite', @@ -256,47 +209,30 @@ export default defineConfig({ }, { text: 'ViteConf', - link: 'https://viteconf.org', + link: 'https://viteconf.org' }, { text: 'Dev.to 社区', link: 'https://dev.to/t/vite' - }, - { - text: '更新日志', - link: 'https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md', - }, - { - text: '贡献指南', - link: 'https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md', - }, - ], - }, + } + ] + } ] }, { - text: '历史版本', + text: `v${viteVersion}`, items: [ { - text: 'Vite v6 文档(英文)', - link: 'https://v6.vite.dev' - }, - { - text: 'Vite v5 文档(英文)', - link: 'https://v5.vite.dev' + text: '更新日志', + link: 'https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md' }, { - text: 'Vite v4 文档(英文)', - link: 'https://v4.vite.dev' + text: '贡献指南', + link: 'https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md' }, { - text: 'Vite v3 文档(英文)', - link: 'https://v3.vite.dev' - }, - { - text: 'Vite v2 文档(英文)', - link: 'https://v2.vite.dev' - }, + items: versionLinks + } ] } ], @@ -308,24 +244,24 @@ export default defineConfig({ items: [ { text: '开始', - link: '/guide/', + link: '/guide/' }, { text: '理念', - link: '/guide/philosophy', + link: '/guide/philosophy' }, { text: '为什么选 Vite', - link: '/guide/why', - }, - ], + link: '/guide/why' + } + ] }, { text: '指引', items: [ { text: '功能', - link: '/guide/features', + link: '/guide/features' }, { text: '命令行接口', @@ -365,25 +301,25 @@ export default defineConfig({ }, { text: '故障排除', - link: '/guide/troubleshooting', + link: '/guide/troubleshooting' }, { text: '性能', - link: '/guide/performance', + link: '/guide/performance' }, { text: 'Rolldown', - link: '/guide/rolldown', + link: '/guide/rolldown' }, { - text: '从 v6 迁移', - link: '/guide/migration', + text: `Migration from v${viteMajorVersion - 1}`, + link: '/guide/migration' }, { text: '破坏性变更', - link: '/changes/', - }, - ], + link: '/changes/' + } + ] }, { text: 'API', @@ -394,43 +330,43 @@ export default defineConfig({ }, { text: 'HMR API', - link: '/guide/api-hmr', + link: '/guide/api-hmr' }, { text: 'JavaScript API', - link: '/guide/api-javascript', + link: '/guide/api-javascript' }, { text: '配置参考', - link: '/config/', - }, - ], + link: '/config/' + } + ] }, { text: '环境 API', items: [ { text: '介绍', - link: '/guide/api-environment', + link: '/guide/api-environment' }, { text: '环境实例', - link: '/guide/api-environment-instances', + link: '/guide/api-environment-instances' }, { text: '插件', - link: '/guide/api-environment-plugins', + link: '/guide/api-environment-plugins' }, { text: '框架', - link: '/guide/api-environment-frameworks', + link: '/guide/api-environment-frameworks' }, { text: '运行时', - link: '/guide/api-environment-runtimes', - }, - ], - }, + link: '/guide/api-environment-runtimes' + } + ] + } ], '/config/': [ { @@ -466,51 +402,51 @@ export default defineConfig({ }, { text: 'Worker 选项', - link: '/config/worker-options', - }, - ], - }, + link: '/config/worker-options' + } + ] + } ], '/changes/': [ { text: '破坏性变更', - link: '/changes/', + link: '/changes/' }, { text: '现在', - items: [], + items: [] }, { text: '未来', items: [ { text: '钩子函数中的 this.environment', - link: '/changes/this-environment-in-hooks', + link: '/changes/this-environment-in-hooks' }, { text: 'HMR hotUpdate 插件钩子', - link: '/changes/hotupdate-hook', + link: '/changes/hotupdate-hook' }, { text: '迁移到基于环境的API', - link: '/changes/per-environment-apis', + link: '/changes/per-environment-apis' }, { text: '使用 ModuleRunner API 进行服务端渲染', - link: '/changes/ssr-using-modulerunner', + link: '/changes/ssr-using-modulerunner' }, { text: '构建过程中的共享插件', - link: '/changes/shared-plugins-during-build', - }, - ], + link: '/changes/shared-plugins-during-build' + } + ] }, { text: '过去', - items: [], - }, - ], - }, + items: [] + } + ] + } }, transformPageData(pageData) { const canonicalUrl = `${ogUrl}/${pageData.relativePath}` @@ -519,7 +455,7 @@ export default defineConfig({ pageData.frontmatter.head ??= [] pageData.frontmatter.head.unshift( ['link', { rel: 'canonical', href: canonicalUrl }], - ['meta', { property: 'og:title', content: pageData.title }], + ['meta', { property: 'og:title', content: pageData.title }] ) return pageData }, @@ -530,13 +466,13 @@ export default defineConfig({ config(md) { md.use(groupIconMdPlugin, { titleBar: { - includeSnippet: true, - }, + includeSnippet: true + } }) md.use(markdownItImageSize, { - publicDir: path.resolve(import.meta.dirname, '../public'), + publicDir: path.resolve(import.meta.dirname, '../public') }) - }, + } }, vite: { plugins: [ @@ -544,18 +480,21 @@ export default defineConfig({ groupIconVitePlugin({ customIcon: { firebase: 'vscode-icons:file-type-firebase', - '.gitlab-ci.yml': 'vscode-icons:file-type-gitlab', - }, - }), + '.gitlab-ci.yml': 'vscode-icons:file-type-gitlab' + } + }) ], optimizeDeps: { include: [ '@shikijs/vitepress-twoslash/client', 'gsap', 'gsap/dist/ScrollTrigger', - 'gsap/dist/MotionPathPlugin', - ], + 'gsap/dist/MotionPathPlugin' + ] }, + define: { + __VITE_VERSION__: JSON.stringify(viteVersion) + } }, - buildEnd, + buildEnd }) diff --git a/.vitepress/theme/components/ReleaseTag.vue b/.vitepress/theme/components/ReleaseTag.vue deleted file mode 100644 index c16538ae..00000000 --- a/.vitepress/theme/components/ReleaseTag.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/.vitepress/theme/components/SupportedVersions.vue b/.vitepress/theme/components/SupportedVersions.vue new file mode 100644 index 00000000..b2530ee4 --- /dev/null +++ b/.vitepress/theme/components/SupportedVersions.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index ebae52f0..7a67b153 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -8,7 +8,6 @@ import './styles/landing.css' import AsideSponsors from './components/AsideSponsors.vue' import SvgImage from './components/SvgImage.vue' import WwAds from './components/WwAds.vue' -import ReleaseTag from './components/ReleaseTag.vue' import './custom.css' import YouTubeVideo from './components/YouTubeVideo.vue' import SponsorBanner from './components/SponsorBanner.vue' @@ -21,15 +20,13 @@ export default { return h(DefaultTheme.Layout, null, { 'aside-outline-after': () => h(WwAds), 'layout-top': () => h(SponsorBanner), - 'aside-ads-before': () => h(AsideSponsors), + 'aside-ads-before': () => h(AsideSponsors) }) }, enhanceApp({ app }) { app.component('SvgImage', SvgImage) - app.component('ReleaseTag', ReleaseTag) app.component('YouTubeVideo', YouTubeVideo) app.component('NonInheritBadge', NonInheritBadge) app.use(TwoslashFloatingVue) - }, + } } satisfies Theme - diff --git a/.vitepress/utils/useReleaseTag.ts b/.vitepress/utils/useReleaseTag.ts deleted file mode 100644 index 2cd51836..00000000 --- a/.vitepress/utils/useReleaseTag.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { onMounted, ref } from 'vue' - -export function useReleaseTag() { - const releaseTag = ref('') - - onMounted(async () => { - const result = await fetch('https://api.github.com/repos/vitejs/docs-cn/releases/latest') - const json = await result.json() - releaseTag.value = json?.tag_name ?? '' - }) - - return { - releaseTag - } -} diff --git a/guide/index.md b/guide/index.md index f27f787f..f6194d9f 100644 --- a/guide/index.md +++ b/guide/index.md @@ -259,6 +259,8 @@ pnpm link --global # 在这一步中可使用你喜欢的包管理器 然后,回到你的 Vite 项目并运行 `pnpm link --global vite`(或者使用你的其他包管理工具来全局链接 `vite`)。重新启动开发服务器来体验新功能吧! +想了解更多关于 Vite 如何以及何时发布的信息,请查看 [发布](../releases.md) 文档。 + ::: tip 处理依赖中的 Vite 版本 若需替换依赖链中传递使用的 Vite 版本(Transitive Dependencies),应使用 [npm overrides](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#overrides) 或 [pnpm overrides](https://pnpm.io/9.x/package_json#pnpmoverrides)。 ::: diff --git a/package.json b/package.json index c8f7e2c8..8ba1c6c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vite-docs-cn", - "version": "1.0.0", + "version": "7.2.0", "description": "Vite.js documentation Chinese translation.", "repository": "https://github.com/vitejs/docs-cn", "type": "module", diff --git a/releases.md b/releases.md index db40ce3f..09a86e3d 100644 --- a/releases.md +++ b/releases.md @@ -1,3 +1,7 @@ + + # 发布 {#releases} Vite 的发布遵循 [语义化版本控制](https://semver.org/)。你可以在 [Vite npm 包页面](https://www.npmjs.com/package/vite) 查看 Vite 的最新稳定版本。 @@ -12,20 +16,21 @@ Vite 没有固定的发布周期。 - **次要版本** 总是包含新功能,并根据需要发布。且总会有一个 beta 预发布阶段(通常每两个月)。 - **主要版本** 通常与 [Node.js 生命周期终止计划](https://endoflife.date/nodejs) 保持一致,并会提前宣布。这些版本会经过与生态系统的长期讨论,并有 alpha 和 beta 预发布阶段(通常每年)。 -Vite 团队支持的 Vite 版本范围是这样确定的: +## 支持版本 {#supported-versions} + +当前支持的vite版本有: + + + +
+ +支持的版本范围由以下因素确定: - **当前次要版本** 会定期提供修复。 - **上一个主要版本** (仅限其最新的次要版本)和 **上一个次要版本** 会接收重要修复和安全补丁。 - **倒数第二个主要版本** (仅限其最新的次要版本)和 **倒数第二个次要版本** 会接收安全补丁。 - 这些之前的所有版本将不再支持。 -例如,如果 Vite 最新版本为 5.3.10: - -- `vite@5.3` 会定期发布补丁版本。 -- 重要修复和安全补丁会回溯到 `vite@4` 和 `vite@5.2`。 -- 安全补丁也会回溯到 `vite@3` 和 `vite@5.1`。 -- `vite@2` 和 `vite@5.0` 不再支持更新。用户应升级以接收更新。 - 我们建议定期更新 Vite。在每次主要版本更新时,请查看 [迁移指南](/guide/migration)。Vite 团队与生态系统中的主要项目紧密合作,以确保新版本的质量。我们通过 [vite-ecosystem-ci 项目](https://github.com/vitejs/vite-ecosystem-ci) 在发布新版本前测试它们。大多数使用 Vite 的项目应该能够快速提供支持或迁移到新版本。 ## 语义化版本控制的特殊情况 {#semantic-versioning-edge-cases}