Skip to content

Commit 7942efa

Browse files
release for Vite v5.0
Merge pull request #839 from vitejs/dev
2 parents f5d5411 + c384079 commit 7942efa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1185
-345
lines changed

.vitepress/config.ts

+104-32
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,65 @@
11
import { defineConfig } from 'vitepress'
2-
import renderPermaLink from './render-perma-link'
3-
import MarkDownItCustomAnchor from './markdown-it-custom-anchor'
42

53
const ogDescription = 'Next Generation Frontend Tooling'
64
const ogImage = 'https://vitejs.dev/og-image.png'
75
const ogTitle = 'Vite'
86
const ogUrl = 'https://vitejs.dev'
97

8+
// netlify envs
9+
const deployURL = process.env.DEPLOY_PRIME_URL || ''
10+
const commitRef = process.env.COMMIT_REF?.slice(0, 8) || 'dev'
11+
12+
const deployType = (() => {
13+
switch (deployURL) {
14+
case 'https://main--vite-docs-main.netlify.app':
15+
return 'main'
16+
case '':
17+
return 'local'
18+
default:
19+
return 'release'
20+
}
21+
})()
22+
const additionalTitle = ((): string => {
23+
switch (deployType) {
24+
case 'main':
25+
return ' (main branch)'
26+
case 'local':
27+
return ' (local)'
28+
case 'release':
29+
return ''
30+
}
31+
})()
32+
const versionLinks = ((): DefaultTheme.NavItemWithLink[] => {
33+
const oldVersions: DefaultTheme.NavItemWithLink[] = [
34+
{
35+
text: 'Vite 4 Docs',
36+
link: 'https://v4.vitejs.dev',
37+
},
38+
{
39+
text: 'Vite 3 Docs',
40+
link: 'https://v3.vitejs.dev',
41+
},
42+
{
43+
text: 'Vite 2 Docs',
44+
link: 'https://v2.vitejs.dev',
45+
},
46+
]
47+
48+
switch (deployType) {
49+
case 'main':
50+
case 'local':
51+
return [
52+
{
53+
text: 'Vite 5 Docs (release)',
54+
link: 'https://vitejs.dev',
55+
},
56+
...oldVersions,
57+
]
58+
case 'release':
59+
return oldVersions
60+
}
61+
})()
62+
1063
export default defineConfig({
1164
title: 'Vite 官方中文文档',
1265
description: '下一代前端工具链',
@@ -40,6 +93,7 @@ export default defineConfig({
4093
es: { label: 'Español', link: 'https://es.vitejs.dev' },
4194
pt: { label: 'Português', link: 'https://pt.vitejs.dev' },
4295
ko: { label: '한국어', link: 'https://ko.vitejs.dev' },
96+
de: { label: 'Deutsch', link: 'https://de.vitejs.dev' },
4397
},
4498

4599
themeConfig: {
@@ -51,7 +105,8 @@ export default defineConfig({
51105
},
52106

53107
outline: {
54-
label: '本页目录'
108+
label: '本页目录',
109+
level: [2, 3],
55110
},
56111

57112
socialLinks: [
@@ -127,31 +182,44 @@ export default defineConfig({
127182
text: '相关链接',
128183
items: [
129184
{ text: 'Team', link: '/team' },
185+
{ text: 'Blog', link: '/blog' },
130186
{ text: 'Releases', link: '/releases' },
131187
{
132-
text: 'Twitter',
133-
link: 'https://twitter.com/vite_js'
134-
},
135-
{
136-
text: 'Discord Chat',
137-
link: 'https://chat.vitejs.dev'
138-
},
139-
{
140-
text: 'Awesome Vite',
141-
link: 'https://github.com/vitejs/awesome-vite'
142-
},
143-
{
144-
text: 'Dev.to 社区',
145-
link: 'https://dev.to/t/vite'
188+
items: [
189+
{
190+
text: 'Twitter',
191+
link: 'https://twitter.com/vite_js',
192+
},
193+
{
194+
text: 'Discord 聊天室',
195+
link: 'https://chat.vitejs.dev'
196+
},
197+
{
198+
text: 'Awesome Vite',
199+
link: 'https://github.com/vitejs/awesome-vite'
200+
},
201+
{
202+
text: 'ViteConf',
203+
link: 'https://viteconf.org',
204+
},
205+
{
206+
text: 'Dev.to 社区',
207+
link: 'https://dev.to/t/vite'
208+
},
209+
{
210+
text: 'Rollup 插件兼容',
211+
link: 'https://vite-rollup-plugins.patak.dev/'
212+
},
213+
{
214+
text: '更新日志',
215+
link: 'https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md'
216+
},
217+
{
218+
text: '贡献指南',
219+
link: 'https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md',
220+
},
221+
],
146222
},
147-
{
148-
text: 'Rollup 插件兼容',
149-
link: 'https://vite-rollup-plugins.patak.dev/'
150-
},
151-
{
152-
text: '更新日志',
153-
link: 'https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md'
154-
}
155223
]
156224
},
157225
{
@@ -230,12 +298,16 @@ export default defineConfig({
230298
text: '故障排除',
231299
link: '/guide/troubleshooting'
232300
},
301+
{
302+
text: '性能',
303+
link: '/guide/performance',
304+
},
233305
{
234306
text: '理念',
235307
link: '/guide/philosophy',
236308
},
237309
{
238-
text: '从 v3 迁移',
310+
text: '从 v4 迁移',
239311
link: '/guide/migration'
240312
},
241313
],
@@ -296,11 +368,11 @@ export default defineConfig({
296368
},
297369
{
298370
text: 'Worker 选项',
299-
link: '/config/worker-options'
300-
}
301-
]
302-
}
303-
]
304-
}
371+
link: '/config/worker-options',
372+
},
373+
],
374+
},
375+
],
376+
},
305377
},
306378
})

.vitepress/theme/components/AsideSponsors.vue

+10-8
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ const sponsors = computed(() => {
1818
</script>
1919

2020
<template>
21-
<a class="viteconf" href="https://viteconf.org/23" target="_blank">
21+
<a
22+
class="viteconf"
23+
href="https://viteconf.org/23/replay?utm=vite-sidebar"
24+
target="_blank"
25+
>
2226
<img width="22" height="22" src="/viteconf.svg" />
2327
<span>
24-
<p class="extra-info">Free Online Conference</p>
25-
<p class="heading">ViteConf 23 - Oct 5</p>
26-
<p class="extra-info">Get your ticket now!</p>
28+
<p class="extra-info">Beyond Fast</p>
29+
<p class="heading">ViteConf 2023</p>
30+
<p class="extra-info">Watch the replay!</p>
2731
</span>
2832
</a>
2933
<VPDocAsideSponsors v-if="data" :data="sponsors" />
@@ -34,7 +38,6 @@ const sponsors = computed(() => {
3438
margin-top: 1rem;
3539
margin-bottom: 1rem;
3640
border-radius: 14px;
37-
padding-left: 2.5rem;
3841
padding-top: 0.4rem;
3942
padding-bottom: 0.4rem;
4043
position: relative;
@@ -44,7 +47,8 @@ const sponsors = computed(() => {
4447
display: flex;
4548
align-items: center;
4649
justify-content: center;
47-
gap: 0.75rem;
50+
width: 100%;
51+
gap: 1rem;
4852
background-color: var(--vp-c-bg-alt);
4953
border: 2px solid var(--vp-c-bg-alt);
5054
transition: border-color 0.5s;
@@ -53,8 +57,6 @@ const sponsors = computed(() => {
5357
border: 2px solid var(--vp-c-brand-light);
5458
}
5559
.viteconf img {
56-
position: absolute;
57-
left: 1.5rem;
5860
transition: transform 0.5s;
5961
transform: scale(1.25);
6062
}
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<script setup lang="ts">
2+
import { data as posts } from './blog.data'
3+
4+
function getDateTime(time: number) {
5+
return new Date(time).toISOString()
6+
}
7+
</script>
8+
9+
<template>
10+
<ul class="blog-list">
11+
<li class="blog-entry" v-for="post of posts">
12+
<article>
13+
<time :datetime="getDateTime(post.date.time)">{{
14+
post.date.string
15+
}}</time>
16+
<h2 class="title">
17+
<a :href="post.url">{{ post.title }}</a>
18+
</h2>
19+
</article>
20+
</li>
21+
</ul>
22+
</template>
23+
24+
<style scoped>
25+
.blog-list {
26+
list-style-type: none;
27+
padding: 0;
28+
}
29+
.blog-entry {
30+
margin-top: 3em;
31+
border-bottom: 1px solid var(--vp-c-divider);
32+
}
33+
.blog-entry time {
34+
font-size: 14px;
35+
}
36+
.title {
37+
border: none;
38+
margin-top: 0;
39+
padding-top: 0;
40+
font-size: 22px;
41+
}
42+
.title a {
43+
font-weight: 600;
44+
text-decoration: none;
45+
}
46+
</style>
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { createContentLoader } from 'vitepress'
2+
3+
interface Post {
4+
title: string
5+
url: string
6+
date: {
7+
time: number
8+
string: string
9+
}
10+
}
11+
12+
declare const data: Post[]
13+
export { data }
14+
15+
export default createContentLoader('blog/*.md', {
16+
// excerpt: true,
17+
transform(raw): Post[] {
18+
return raw
19+
.map(({ url, frontmatter }) => ({
20+
title: frontmatter.head.find((e) => e[1].property === 'og:title')[1]
21+
.content,
22+
url,
23+
date: formatDate(frontmatter.date),
24+
}))
25+
.sort((a, b) => b.date.time - a.date.time)
26+
},
27+
})
28+
29+
function formatDate(raw: string): Post['date'] {
30+
const date = new Date(raw)
31+
date.setUTCHours(12)
32+
return {
33+
time: +date,
34+
string: date.toLocaleDateString('en-US', {
35+
year: 'numeric',
36+
month: 'long',
37+
day: 'numeric',
38+
}),
39+
}
40+
}

.vitepress/theme/composables/sponsor.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,14 @@ const viteSponsors: Pick<Sponsors, 'special' | 'gold'> = {
4242
img: '/astro.svg',
4343
},
4444
],
45-
gold: [],
45+
gold: [
46+
// through GitHub -> OpenCollective
47+
{
48+
name: 'Remix',
49+
url: 'https://remix.run/',
50+
img: '/remix.svg',
51+
},
52+
],
4653
}
4754

4855
export function useSponsor() {

.vitepress/theme/index.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
import { h } from 'vue'
2-
import Theme from 'vitepress/theme'
2+
import type { Theme } from 'vitepress'
3+
import DefaultTheme from 'vitepress/theme'
4+
import './styles/vars.css'
35
import HomeSponsors from './components/HomeSponsors.vue'
46
import AsideSponsors from './components/AsideSponsors.vue'
57
import SvgImage from './components/SvgImage.vue'
68
import WwAds from './components/WwAds.vue'
7-
import './styles/vars.css'
89
import './custom.css'
10+
// temporary fix for vitepress not including component css when only
11+
// imported in a single page
12+
import './components/BlogIndex.vue'
913

1014
export default {
11-
...Theme,
15+
extends: DefaultTheme,
1216
Layout() {
13-
return h(Theme.Layout, null, {
17+
return h(DefaultTheme.Layout, null, {
1418
'home-features-after': () => h(HomeSponsors),
1519
'aside-outline-after': () => h(WwAds),
1620
'aside-bottom': () => h(AsideSponsors)
1721
})
1822
},
1923
enhanceApp({ app }) {
2024
app.component('SvgImage', SvgImage)
21-
}
22-
}
25+
},
26+
} satisfies Theme
27+

.vitepress/theme/styles/vars.css

+8
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,11 @@
118118
.vp-sponsor.aside .vp-sponsor-grid.mini .vp-sponsor-grid-image {
119119
max-width: 124px;
120120
}
121+
122+
.vp-sponsor.aside .vp-sponsor-grid.mini .vp-sponsor-grid-image[alt='Bit'] {
123+
max-height: 44px;
124+
}
125+
126+
.vp-sponsor-grid.big .vp-sponsor-grid-image {
127+
max-height: 96px;
128+
}

0 commit comments

Comments
 (0)