Skip to content

Commit 2658a92

Browse files
Merge pull request #867 from vitejs/sync-8b72e230-1
docs(en): merge docs-cn/sync-docs into docs-cn/dev @ 8b72e23
2 parents aa25d8b + 9d40428 commit 2658a92

34 files changed

+1349
-632
lines changed

.vitepress/config.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,61 @@ const ogImage = 'https://vitejs.dev/og-image.png'
55
const ogTitle = 'Vite'
66
const ogUrl = 'https://vitejs.dev'
77

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+
863
export default defineConfig({
964
title: 'Vite 官方中文文档',
1065
description: '下一代前端工具链',
@@ -38,6 +93,7 @@ export default defineConfig({
3893
es: { label: 'Español', link: 'https://es.vitejs.dev' },
3994
pt: { label: 'Português', link: 'https://pt.vitejs.dev' },
4095
ko: { label: '한국어', link: 'https://ko.vitejs.dev' },
96+
de: { label: 'Deutsch', link: 'https://de.vitejs.dev' },
4197
},
4298

4399
themeConfig: {
@@ -126,6 +182,7 @@ export default defineConfig({
126182
text: '相关链接',
127183
items: [
128184
{ text: 'Team', link: '/team' },
185+
{ text: 'Blog', link: '/blog' },
129186
{ text: 'Releases', link: '/releases' },
130187
{
131188
items: [

.vitepress/rewrite-title/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
const path = require('path')
2-
const fsp = require('fs').promises
3-
const matterService = require('../utils/frontmatter-service')
1+
import path from 'node:path'
2+
import fsp from 'node:fs/promises'
3+
import matterService from '../utils/frontmatter-service.js'
4+
import { fileURLToPath } from 'node:url'
5+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
46
const workspacePath = path.resolve(__dirname, '..', '..')
57

68
const h1MdRegExp = /^#\s+(.+)\s+(\{#([\w-]+)\})$/
@@ -41,4 +43,4 @@ const ergodicDirectory = async (dirPath) => {
4143
}
4244
}
4345

44-
module.exports = () => ergodicDirectory(workspacePath)
46+
export default () => ergodicDirectory(workspacePath)

.vitepress/theme/components/AsideSponsors.vue

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,70 @@ const sponsors = computed(() => {
1818
</script>
1919

2020
<template>
21+
<a
22+
class="viteconf"
23+
href="https://viteconf.org/23/replay?utm=vite-sidebar"
24+
target="_blank"
25+
>
26+
<img width="22" height="22" src="/viteconf.svg" />
27+
<span>
28+
<p class="extra-info">Beyond Fast</p>
29+
<p class="heading">ViteConf 2023</p>
30+
<p class="extra-info">Watch the replay!</p>
31+
</span>
32+
</a>
2133
<VPDocAsideSponsors v-if="data" :data="sponsors" />
2234
</template>
35+
36+
<style>
37+
.viteconf {
38+
margin-top: 1rem;
39+
margin-bottom: 1rem;
40+
border-radius: 14px;
41+
padding-top: 0.4rem;
42+
padding-bottom: 0.4rem;
43+
position: relative;
44+
font-size: 0.9rem;
45+
font-weight: 700;
46+
line-height: 1.1rem;
47+
display: flex;
48+
align-items: center;
49+
justify-content: center;
50+
width: 100%;
51+
gap: 1rem;
52+
background-color: var(--vp-c-bg-alt);
53+
border: 2px solid var(--vp-c-bg-alt);
54+
transition: border-color 0.5s;
55+
}
56+
.viteconf:hover {
57+
border: 2px solid var(--vp-c-brand-light);
58+
}
59+
.viteconf img {
60+
transition: transform 0.5s;
61+
transform: scale(1.25);
62+
}
63+
.viteconf:hover img {
64+
transform: scale(1.75);
65+
}
66+
.viteconf .heading {
67+
background-image: linear-gradient(
68+
120deg,
69+
#b047ff 16%,
70+
var(--vp-c-brand-lighter),
71+
var(--vp-c-brand-lighter)
72+
);
73+
background-clip: text;
74+
-webkit-background-clip: text;
75+
-webkit-text-fill-color: transparent;
76+
}
77+
.viteconf .extra-info {
78+
color: var(--vp-c-text-1);
79+
opacity: 0;
80+
font-size: 0.7rem;
81+
padding-left: 0.1rem;
82+
transition: opacity 0.5s;
83+
}
84+
.viteconf:hover .extra-info {
85+
opacity: 0.9;
86+
}
87+
</style>
Lines changed: 46 additions & 0 deletions
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>
Lines changed: 40 additions & 0 deletions
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/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import AsideSponsors from './components/AsideSponsors.vue'
77
import SvgImage from './components/SvgImage.vue'
88
import WwAds from './components/WwAds.vue'
99
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'
1013

1114
export default {
1215
extends: DefaultTheme,

.vitepress/theme/styles/vars.css

Lines changed: 8 additions & 0 deletions
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+
}

.vitepress/utils/frontmatter-service.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
const fs = require('fs')
2-
const matter = require('gray-matter')
3-
const { extend, isEmpty: _isEmpty } = require('lodash')
1+
import fs from 'node:fs'
2+
import matter from 'gray-matter'
3+
import _ from 'lodash'
4+
45
// gray-matter is a dep for vitepress,
56
// no need to specify that in package.json
67

@@ -21,7 +22,7 @@ class FrontMatterService {
2122
}
2223

2324
isEmpty() {
24-
return _isEmpty(this.matter.data)
25+
return _._isEmpty(this.matter.data)
2526
}
2627

2728
/** @param{(data: string) => void} callback */
@@ -48,7 +49,7 @@ class FrontMatterService {
4849

4950
/** @param {Record<string, any>} src */
5051
extend(src) {
51-
extend(this.matter.data, src)
52+
_.extend(this.matter.data, src)
5253
return this
5354
}
5455

@@ -63,4 +64,4 @@ class FrontMatterService {
6364
}
6465
}
6566

66-
module.exports = new FrontMatterService()
67+
export default new FrontMatterService()

_data/team.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@ export const core = [
5353
avatar: 'https://github.com/sapphi-red.png',
5454
name: 'green',
5555
title: 'Web Developer',
56-
desc: 'Vite team member. Call me sapphi or green or midori ;)',
56+
desc: 'Vite core team member. Call me sapphi or green or midori ;)',
5757
links: [
5858
{ icon: 'github', link: 'https://github.com/sapphi-red' },
5959
{ icon: 'twitter', link: 'https://twitter.com/sapphi_red' },
60+
{ icon: 'mastodon', link: 'https://elk.zone/m.webtoo.ls/@sapphi_red' },
6061
],
6162
sponsor: 'https://github.com/sponsors/sapphi-red',
6263
},
@@ -82,7 +83,7 @@ export const core = [
8283
desc: 'Passionate TypeScript enthusiast working extensively with Vue SPA and pug.',
8384
links: [
8485
{ icon: 'github', link: 'https://github.com/Shinigami92' },
85-
{ icon: 'twitter', link: 'https://twitter.com/Shini_92' },
86+
{ icon: 'mastodon', link: 'https://elk.zone/mas.to/@Shini92' },
8687
],
8788
sponsor: 'https://github.com/sponsors/Shinigami92',
8889
},

blog.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
sidebar: false
3+
editLink: false
4+
outline: false
5+
---
6+
7+
<script setup>
8+
import BlogIndex from './.vitepress/theme/components/BlogIndex.vue'
9+
</script>
10+
11+
# Latest From the Vite Blog
12+
13+
<BlogIndex/>

0 commit comments

Comments
 (0)