Skip to content

Commit 11e9b77

Browse files
committed
docs(release): update supported versions wording
1 parent c1efaad commit 11e9b77

File tree

3 files changed

+175
-8
lines changed

3 files changed

+175
-8
lines changed

.vitepress/config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,9 @@ export default defineConfig({
517517
'gsap/dist/MotionPathPlugin',
518518
],
519519
},
520+
define: {
521+
__VITE_VERSION__: JSON.stringify(viteVersion),
522+
},
520523
},
521524
buildEnd,
522525
})
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<script setup lang="ts">
2+
import { ref, computed } from 'vue'
3+
4+
declare const __VITE_VERSION__: string
5+
6+
// 定数
7+
const supportedVersionMessage = {
8+
color: 'var(--vp-c-brand-1)',
9+
text: 'サポートされています',
10+
}
11+
const notSupportedVersionMessage = {
12+
color: 'var(--vp-c-danger-1)',
13+
text: 'サポートされていません',
14+
}
15+
const previousMajorLatestMinors: Record<string, string> = {
16+
'2': '2.9',
17+
'3': '3.2',
18+
'4': '4.5',
19+
'5': '5.4',
20+
'6': '6.4',
21+
}
22+
23+
// 現在の最新 Vite バージョンとサポート情報
24+
const parsedViteVersion = parseVersion(__VITE_VERSION__)!
25+
const supportInfo = computeSupportInfo(parsedViteVersion)
26+
27+
// サポートバージョン入力のチェック
28+
const checkedVersion = ref(`${Math.max(parsedViteVersion.major - 3, 2)}.0.0`)
29+
const checkedResult = computed(() => {
30+
const version = checkedVersion.value
31+
if (!isValidViteVersion(version)) return notSupportedVersionMessage
32+
33+
const parsedVersion = parseVersion(checkedVersion.value)
34+
if (!parsedVersion) return notSupportedVersionMessage
35+
36+
const satisfies = (targetVersion: string) => {
37+
const compared = parseVersion(targetVersion)!
38+
return (
39+
parsedVersion.major === compared.major &&
40+
parsedVersion.minor >= compared.minor
41+
)
42+
}
43+
const satisfiesOneSupportedVersion =
44+
parsedVersion.major >= parsedViteVersion.major || // 将来のメジャーバージョンをサポート対象として扱う
45+
supportInfo.regularPatches.some(satisfies) ||
46+
supportInfo.importantFixes.some(satisfies) ||
47+
supportInfo.securityPatches.some(satisfies)
48+
49+
return satisfiesOneSupportedVersion
50+
? supportedVersionMessage
51+
: notSupportedVersionMessage
52+
})
53+
54+
function parseVersion(version: string) {
55+
let [major, minor, patch] = version.split('.').map((v) => {
56+
const num = /^\d+$/.exec(v)?.[0]
57+
return num ? parseInt(num) : null
58+
})
59+
if (!major) return null
60+
minor ??= 0
61+
patch ??= 0
62+
63+
return { major, minor, patch }
64+
}
65+
66+
function computeSupportInfo(
67+
version: NonNullable<ReturnType<typeof parseVersion>>,
68+
) {
69+
const { major, minor } = version
70+
const f = (versions: string[]) => {
71+
return versions
72+
.map((v) => previousMajorLatestMinors[v] ?? v)
73+
.filter((version) => {
74+
if (!isValidViteVersion(version)) return false
75+
// 負のバージョンは無効
76+
if (/-\d/.test(version)) return false
77+
return true
78+
})
79+
}
80+
81+
return {
82+
regularPatches: f([`${major}.${minor}`]),
83+
importantFixes: f([`${major - 1}`, `${major}.${minor - 1}`]),
84+
securityPatches: f([`${major - 2}`, `${major}.${minor - 2}`]),
85+
}
86+
}
87+
88+
function versionsToText(versions: string[]) {
89+
versions = versions.map((v) => `<code>vite@${v}</code>`)
90+
if (versions.length === 0) return ''
91+
if (versions.length === 1) return versions[0]
92+
return (
93+
versions.slice(0, -1).join('') + ' および ' + versions[versions.length - 1]
94+
)
95+
}
96+
97+
function isValidViteVersion(version: string) {
98+
if (version.length === 1) version += '.'
99+
// Vite 0.x は記載すべきではなく、Vite 1.x はリリースされなかった
100+
if (version.startsWith('0.') || version.startsWith('1.')) return false
101+
return true
102+
}
103+
</script>
104+
105+
<template>
106+
<div>
107+
<ul>
108+
<li v-if="supportInfo.regularPatches.length">
109+
定期的なパッチは <span v-html="versionsToText(supportInfo.regularPatches)"></span> にリリースされます。
110+
111+
</li>
112+
<li v-if="supportInfo.importantFixes.length">
113+
重要な修正とセキュリティパッチは <span v-html="versionsToText(supportInfo.importantFixes)"></span> にバックポートされます。
114+
115+
</li>
116+
<li v-if="supportInfo.securityPatches.length">
117+
セキュリティパッチは <span v-html="versionsToText(supportInfo.securityPatches)"></span> にもバックポートされます。
118+
119+
</li>
120+
<li>
121+
これより前のすべてのバージョンはサポートされていません。ユーザーはアップデートを受け取るためにアップグレードする必要があります。
122+
123+
</li>
124+
</ul>
125+
<p>
126+
Vite
127+
<input
128+
class="checked-input"
129+
type="text"
130+
v-model="checkedVersion"
131+
placeholder="0.0.0"
132+
/> を使用している場合、それは
133+
<strong :style="{ color: checkedResult.color }">{{
134+
checkedResult.text
135+
}}</strong
136+
>。
137+
</p>
138+
</div>
139+
</template>
140+
141+
<style scoped>
142+
.checked-input {
143+
display: inline-block;
144+
padding: 0px 5px;
145+
width: 100px;
146+
color: var(--vp-c-text-1);
147+
background: var(--vp-c-bg-soft);
148+
font-size: var(--vp-code-font-size);
149+
font-family: var(--vp-font-family-mono);
150+
border: 1px solid var(--vp-c-divider);
151+
border-radius: 5px;
152+
transition: border-color 0.1s;
153+
}
154+
155+
.checked-input:focus,
156+
.checked-input:hover {
157+
border-color: var(--vp-c-brand);
158+
}
159+
</style>

releases.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
<script setup>
2+
import SupportedVersions from './.vitepress/theme/components/SupportedVersions.vue';
3+
</script>
4+
15
# リリース
26

37
Vite のリリースは[セマンティック バージョニング](https://semver.org/)に準拠します。Vite の [npm パッケージページ](https://www.npmjs.com/package/vite)で Vite の最新安定バージョンを確認できます。
@@ -12,19 +16,20 @@ Vite には、一定のリリースサイクルがありません。
1216
- **マイナー**リリースは常に新しい機能が含まれており、必要に応じてリリースされます。マイナーリリースには常にベータプレリリース段階があります(通常は 2 ヶ月ごと)。
1317
- **メジャー**リリースは通常 [Node.js の EOL スケジュール](https://endoflife.date/nodejs)に従い、予めアナウンスされます。これらのリリースはエコシステムとの長期的な議論を経て、アルファプレリリース段階とベータプレリリース段階があります(通常は 1 年ごと)。
1418

15-
Vite チームがサポートする Vite のバージョン範囲は、以下の通りに自動的に決定されます:
19+
## サポートバージョン
20+
21+
簡単に説明すると、現在サポートされている Vite のバージョンは以下の通りです:
22+
23+
<SupportedVersions />
24+
25+
<br>
26+
27+
サポートされるバージョン範囲は、以下の通りに自動的に決定されます:
1628

1729
- **現在のマイナー**は、定期的に修正を受け取ります。
1830
- **1 つ前のメジャー**(最新のマイナー向けのみ)および **1 つ前のマイナー**は、重要な修正とセキュリティパッチを受け取ります。
1931
- **最後から 2 番目のメジャー**(その最新のマイナー向けのみ)および**最後から 2 番目のマイナー**は、セキュリティパッチを受け取ります。
2032
- これらより前のバージョンはすべてサポートされなくなります。
21-
22-
例として、Vite の最新バージョンが 5.3.10 の場合:
23-
24-
- 定期パッチは `[email protected]` に対してリリースされます。
25-
- 重要な修正とセキュリティパッチは、`vite@4``[email protected]` にバックポートされます。
26-
- セキュリティパッチは、`vite@3``[email protected]` にもバックポートされます。
27-
- `vite@2` および `[email protected]` はサポートされなくなります。アップデートを受け取るには、ユーザーはアップグレードする必要があります。
2833

2934
Vite を定期的にアップデートすることをお勧めします。各メジャーバージョンをアップデートする際には、[移行ガイド](/guide/migration)をご確認ください。Vite チームは、新しいバージョンの品質を確保するために、エコシステムの主要なプロジェクトと緊密に連携しています。Vite チームは、新しい Vite のバージョンをリリースする前に [vite-ecosystem-ci プロジェクト](https://github.com/vitejs/vite-ecosystem-ci)を用いてテストしています。Vite を利用しているほとんどのプロジェクトは、新しいバージョンのリリース後すぐにサポートを提供したり、新しいバージョンに移行したりできるはずです。
3035

0 commit comments

Comments
 (0)