From 3280718e7c1e062c1c4e9bd8bb7cc7838ac109d4 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 17:19:53 +0800 Subject: [PATCH 1/7] feat: add Vite+ installation method --- apps/site/snippets/en/download/vp.bash | 5 +++++ apps/site/types/release.ts | 2 +- apps/site/util/download/constants.json | 10 ++++++++++ packages/i18n/src/locales/en.json | 3 ++- 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 apps/site/snippets/en/download/vp.bash diff --git a/apps/site/snippets/en/download/vp.bash b/apps/site/snippets/en/download/vp.bash new file mode 100644 index 0000000000000..be9c4932f9bf8 --- /dev/null +++ b/apps/site/snippets/en/download/vp.bash @@ -0,0 +1,5 @@ +# Download and install Vite+ +curl -fsSL https://vite.plus | bash + +# Download and install Node.js: +vp env install ${props.release.major} diff --git a/apps/site/types/release.ts b/apps/site/types/release.ts index cacea05df198e..c3d3e350993ee 100644 --- a/apps/site/types/release.ts +++ b/apps/site/types/release.ts @@ -3,7 +3,7 @@ import type { NodeRelease } from '#site/types/releases'; import type { OperatingSystem, Platform } from '#site/types/userAgent'; export type InstallationMethod = - 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'CHOCO' | 'N' | 'ASDF'; + 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'CHOCO' | 'N' | 'ASDF' | 'VP'; export type PackageManager = 'NPM' | 'YARN' | 'PNPM'; // Items with a pipe/default value mean that they are auto inferred diff --git a/apps/site/util/download/constants.json b/apps/site/util/download/constants.json index 1a349025d003c..34d8f7f2f1c91 100644 --- a/apps/site/util/download/constants.json +++ b/apps/site/util/download/constants.json @@ -196,6 +196,16 @@ }, "url": "https://asdf-vm.com/guide/getting-started.html", "info": "layouts.download.codeBox.platformInfo.asdf" + }, + { + "id": "VP", + "name": "Vite+", + "compatibility": { + "os": ["WIN", "MAC", "LINUX"] + }, + "url": "https://viteplus.dev/", + + "info": "layouts.download.codeBox.platformInfo.vp" } ], "packageManagers": [ diff --git a/packages/i18n/src/locales/en.json b/packages/i18n/src/locales/en.json index d839616e7305c..baa59378ee880 100644 --- a/packages/i18n/src/locales/en.json +++ b/packages/i18n/src/locales/en.json @@ -259,7 +259,8 @@ "choco": "Chocolatey is a package manager for Windows.", "docker": "Docker is a containerization platform.", "n": "\"n\" is a cross-platform Node.js version manager.", - "asdf": "\"asdf\" is a cross-platform version manager that supports multiple languages." + "asdf": "\"asdf\" is a cross-platform version manager that supports multiple languages.", + "vp": "\"Vite+\" is a unified toolchain for web development with Node.js version management." } } }, From c5378f1bdf4f15648230aa28d0f75fcc57e413d5 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 17:39:25 +0800 Subject: [PATCH 2/7] fix: support Windows and select the requested Node.js version in Vite+ --- apps/site/snippets/en/download/vp.bash | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/site/snippets/en/download/vp.bash b/apps/site/snippets/en/download/vp.bash index be9c4932f9bf8..cdfc0c90f1d1b 100644 --- a/apps/site/snippets/en/download/vp.bash +++ b/apps/site/snippets/en/download/vp.bash @@ -1,5 +1,9 @@ # Download and install Vite+ -curl -fsSL https://vite.plus | bash +# You'll need to restart the terminal to activate Vite+ +${props.os === 'WIN' ? + 'irm https://vite.plus/ps1 | iex' : + 'curl -fsSL https://vite.plus | bash' +} # Download and install Node.js: -vp env install ${props.release.major} +vp env default ${props.release.version} From 897c3e2c91c9d1786bdf348f48e5a08dc1246626 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 17:39:32 +0800 Subject: [PATCH 3/7] feat: add Vite+ installation icon --- apps/site/util/download/constants.json | 2 +- .../__design__/platform-logos.stories.tsx | 3 +- .../src/Icons/InstallationMethod/VitePlus.tsx | 434 ++++++++++++++++++ .../src/Icons/InstallationMethod/index.ts | 3 +- 4 files changed, 439 insertions(+), 3 deletions(-) create mode 100644 packages/ui-components/src/Icons/InstallationMethod/VitePlus.tsx diff --git a/apps/site/util/download/constants.json b/apps/site/util/download/constants.json index 34d8f7f2f1c91..bb6d21570f6e8 100644 --- a/apps/site/util/download/constants.json +++ b/apps/site/util/download/constants.json @@ -199,12 +199,12 @@ }, { "id": "VP", + "icon": "VitePlus", "name": "Vite+", "compatibility": { "os": ["WIN", "MAC", "LINUX"] }, "url": "https://viteplus.dev/", - "info": "layouts.download.codeBox.platformInfo.vp" } ], diff --git a/packages/ui-components/__design__/platform-logos.stories.tsx b/packages/ui-components/__design__/platform-logos.stories.tsx index 650a9a9b21b5e..07fb222e5cc63 100644 --- a/packages/ui-components/__design__/platform-logos.stories.tsx +++ b/packages/ui-components/__design__/platform-logos.stories.tsx @@ -4,6 +4,7 @@ import { NVM, Choco, N, + VitePlus, Volta, } from '#ui/Icons/InstallationMethod'; import { Apple, Linux, Microsoft, AIX } from '#ui/Icons/OperatingSystem'; @@ -11,7 +12,7 @@ import { Apple, Linux, Microsoft, AIX } from '#ui/Icons/OperatingSystem'; import type { Meta as MetaObj, StoryObj } from '@storybook/react-webpack5'; const osIcons = [Apple, Linux, Microsoft, AIX]; -const installMethodIcons = [Docker, Homebrew, NVM, Choco, N, Volta]; +const installMethodIcons = [Docker, Homebrew, NVM, Choco, N, VitePlus, Volta]; export const PlatformLogos: StoryObj = { render: () => ( diff --git a/packages/ui-components/src/Icons/InstallationMethod/VitePlus.tsx b/packages/ui-components/src/Icons/InstallationMethod/VitePlus.tsx new file mode 100644 index 0000000000000..e586a65cc977a --- /dev/null +++ b/packages/ui-components/src/Icons/InstallationMethod/VitePlus.tsx @@ -0,0 +1,434 @@ +import classNames from 'classnames'; + +import type { FC, SVGProps } from 'react'; + +const VitePlus: FC> = props => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +export default VitePlus; diff --git a/packages/ui-components/src/Icons/InstallationMethod/index.ts b/packages/ui-components/src/Icons/InstallationMethod/index.ts index 5e8bd693bb9a1..5de06821e9d99 100644 --- a/packages/ui-components/src/Icons/InstallationMethod/index.ts +++ b/packages/ui-components/src/Icons/InstallationMethod/index.ts @@ -4,6 +4,7 @@ import FNM from '#ui/Icons/InstallationMethod/FNM'; import Homebrew from '#ui/Icons/InstallationMethod/Homebrew'; import N from '#ui/Icons/InstallationMethod/N'; import NVM from '#ui/Icons/InstallationMethod/NVM'; +import VitePlus from '#ui/Icons/InstallationMethod/VitePlus'; import Volta from '#ui/Icons/InstallationMethod/Volta'; -export { Choco, Docker, FNM, Homebrew, N, NVM, Volta }; +export { Choco, Docker, FNM, Homebrew, N, NVM, VitePlus, Volta }; From 4fe2cd3aae2e20eab9ef3923994e6542795a60b5 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 17:43:28 +0800 Subject: [PATCH 4/7] fix: initialize Vite+ in the current shell --- apps/site/snippets/en/download/vp.bash | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/site/snippets/en/download/vp.bash b/apps/site/snippets/en/download/vp.bash index cdfc0c90f1d1b..9ad18f35874cb 100644 --- a/apps/site/snippets/en/download/vp.bash +++ b/apps/site/snippets/en/download/vp.bash @@ -1,9 +1,14 @@ # Download and install Vite+ -# You'll need to restart the terminal to activate Vite+ ${props.os === 'WIN' ? 'irm https://vite.plus/ps1 | iex' : 'curl -fsSL https://vite.plus | bash' } +# In lieu of restarting the shell +${props.os === 'WIN' + ? '. "$env:APPDATA\\vite-plus\\env.ps1"' + : '. "${XDG_CONFIG_HOME:-$HOME/.config}/vite-plus/env"' +} + # Download and install Node.js: vp env default ${props.release.version} From f062e7a2c4cf2413b687e2280e59250242be1f17 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 18:11:30 +0800 Subject: [PATCH 5/7] fix: use Vite+ package management instead of Corepack --- apps/site/snippets/en/download/corepack.bash | 7 +++++-- apps/site/snippets/en/download/pnpm.bash | 7 +++++-- apps/site/snippets/en/download/vp.bash | 4 ++-- apps/site/snippets/en/download/yarn.bash | 7 +++++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/site/snippets/en/download/corepack.bash b/apps/site/snippets/en/download/corepack.bash index 5dfe35d3cd17a..adb46497cba54 100644 --- a/apps/site/snippets/en/download/corepack.bash +++ b/apps/site/snippets/en/download/corepack.bash @@ -1,2 +1,5 @@ -# Install Corepack: -npm install -g corepack +${props.installMethod === 'VP' ? + '' : + `# Install Corepack: +npm install -g corepack` +} diff --git a/apps/site/snippets/en/download/pnpm.bash b/apps/site/snippets/en/download/pnpm.bash index 1bab2907480ce..515561645967f 100644 --- a/apps/site/snippets/en/download/pnpm.bash +++ b/apps/site/snippets/en/download/pnpm.bash @@ -1,5 +1,8 @@ -# Download and install pnpm: -corepack enable pnpm +${props.installMethod === 'VP' ? + '' : + `# Download and install pnpm: +corepack enable pnpm` +} # Verify pnpm version: pnpm -v diff --git a/apps/site/snippets/en/download/vp.bash b/apps/site/snippets/en/download/vp.bash index 9ad18f35874cb..4ade86497d992 100644 --- a/apps/site/snippets/en/download/vp.bash +++ b/apps/site/snippets/en/download/vp.bash @@ -1,7 +1,7 @@ # Download and install Vite+ ${props.os === 'WIN' ? - 'irm https://vite.plus/ps1 | iex' : - 'curl -fsSL https://vite.plus | bash' + '$env:VP_NODE_MANAGER = "yes"\nirm https://vite.plus/ps1 | iex' : + 'curl -fsSL https://vite.plus | VP_NODE_MANAGER=yes bash' } # In lieu of restarting the shell diff --git a/apps/site/snippets/en/download/yarn.bash b/apps/site/snippets/en/download/yarn.bash index e9f8ae4d9b791..19e7387025a02 100644 --- a/apps/site/snippets/en/download/yarn.bash +++ b/apps/site/snippets/en/download/yarn.bash @@ -1,5 +1,8 @@ -# Download and install Yarn: -corepack enable yarn +${props.installMethod === 'VP' ? + '' : + `# Download and install Yarn: +corepack enable yarn` +} # Verify Yarn version: yarn -v From f87fb72e6df6fe7c9338eed8fc95e1951f78ccf9 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 18:15:05 +0800 Subject: [PATCH 6/7] fix: omit empty download snippets and separate instruction blocks --- .../Downloads/Release/ReleaseCodeBox.tsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx b/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx index 829131d7ceed5..e13bd1aa6fa8c 100644 --- a/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx +++ b/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx @@ -67,19 +67,20 @@ const useSnippetProcessor = ( context.release.major >= 25 && snippets.find(({ name }) => name === 'corepack'); - // Combine and parse snippets - const parsedContent = parseSnippet( - [ - installMethodSnippet, - verifyNodeSnippet, - installCorepackSnippet, - packageManagerSnippet, - ] - .filter(Boolean) - .map(snippet => (snippet as DownloadSnippet).content) - .join('\n'), - context - ); + // Parse snippets individually, skipping those that render empty + const parsedContent = [ + installMethodSnippet, + verifyNodeSnippet, + installCorepackSnippet, + packageManagerSnippet, + ] + .filter(Boolean) + .map(snippet => + parseSnippet((snippet as DownloadSnippet).content, context) + ) + .map(content => content.trim()) + .filter(Boolean) + .join('\n\n'); // Convert to HTML using Shiki's highlighter // This is faster than JSX rendering as it avoids React runtime overhead From 77b56600569b1951f6c3dc142bd9f55faa3ef3f8 Mon Sep 17 00:00:00 2001 From: Liang Date: Thu, 1 Oct 2026 18:35:04 +0800 Subject: [PATCH 7/7] chore: apply changeset --- .changeset/ripe-papers-occur.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/ripe-papers-occur.md diff --git a/.changeset/ripe-papers-occur.md b/.changeset/ripe-papers-occur.md new file mode 100644 index 0000000000000..30e045888fc07 --- /dev/null +++ b/.changeset/ripe-papers-occur.md @@ -0,0 +1,6 @@ +--- +'@node-core/ui-components': minor +'@node-core/website-i18n': patch +--- + +Add the Vite+ installation method icon and description.