关于 vite-v8
vite-v8 是面向开发者和编码 Agent 的技能,用于配置、迁移和调试 Vite 8 项目。内容聚焦 Rolldown/Oxc 架构、环境感知插件、SSR 与性能排查。
主要功能
- 01Vite 8 配置与迁移指导
- 02Rolldown 和 Oxc 配置模式
- 03环境感知插件与 HMR 指导
- 04SSR 和 Module Runner 调试
- 05开发服务器性能指导
适用场景
- 01更新旧版 Rollup/esbuild 配置
- 02排查 Vite 8 的 SSR 行为
- 03编写环境感知的 Vite 插件
- 04调查开发启动缓慢的问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nodnarbnitram/ claude-code-extensions --skill vite-v8安装后在 Claude Code 中输入/vite-v8确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdreferences/build-ssr-migration-reference.mdcore-config-reference.mdperformance-devserver-reference.mdplugin-environment-reference.mdREADME.md详细介绍
Vite 8 技能
使用项目首选的 Vite 原生模式配置、迁移和调试 Vite 8 项目。
开始之前
此技能专注于 Vite 8 的架构转变,而非通用打包器建议。
| 指标 | 不使用技能 | 使用技能 |
|---|---|---|
| 迁移时间 | ~120 分钟 | ~40 分钟 |
| 常见配置错误 | 6+ | 0 |
| Token 用量 | 高(反复试错) | 低(已知模式) |
此技能可避免的已知问题
- 在 Vite 8 配置中保留
rollupOptions,而需要使用rolldownOptions,导致构建失败 - 使用
esbuild而不是oxc,导致 JS/TS 转换配置过时 - 插件代码检查过时的
ssr布尔值,而不是环境感知 API - 使用已弃用的
handleHotUpdate模式,而不是hotUpdate,导致 HMR 问题 - 沿用旧版
ssrLoadModule思维模式,而不是 Module Runner,造成 SSR/运行时认知混乱 - Rust↔JS 插件边界缺少钩子过滤器,导致性能退化
- 桶文件、缺少预热或宽松的导入解析导致启动缓慢、请求瀑布
快速开始
步骤 1:从类型化的 Vite 8 配置开始
// vite.config.ts
import { defineConfig } from 'vite';
export default defineConfig({
server: {
port: 5173,
},
build: {
target: 'baseline-widely-available',
rolldownOptions: {
output: {
manualChunks: undefined,
},
},
},
});
为何重要: Vite 8 围绕 Rolldown/Oxc 时代的配置和默认设置构建。从 defineConfig 和 Vite 8 选项入手,可避免将旧的 Rollup/esbuild 假设移植到新架构中。
步骤 2:在插件和 SSR 代码中优先使用 Vite 8 术语
import type { Plugin } from 'vite';
export function inspectEnvironment(): Plugin {
return {
name: 'inspect-environment',
configEnvironment(name) {
if (name === 'ssr') {
return {
resolve: {
conditions: ['node'],
},
};
}
},
};
}
为何重要: Vite 8 依赖命名环境和环境感知的插件行为。相比旧版客户端与 SSR 的快捷划分,这种方式更合适。
步骤 3:使用正确的一次性命令
vite dev
vite build
vite build --ssr src/entry-server.ts
vite preview
为何重要: 这些是 Agent 和 CI 工作流应当使用的稳定命令接口。除非项目已在使用,否则不要自行设计框架专属抽象。
关键规则
务必做到
- 面向代码库的 Vite 8 工作使用
vite.config.ts和defineConfig - 优先使用
build.rolldownOptions,而非旧版build.rollupOptions - 新的 Vite 8 转换配置优先使用
oxc,而非esbuild - 插件或 SSR 行为因运行时而异时,使用命名环境
- 编写对性能敏感的
transform或resolveId插件时,使用钩子过滤器 - 调试现代 SSR/运行时执行时,采用 Module Runner 概念
- 重视性能时,使用显式文件扩展名并检查桶文件
- Vite 插件代码优先采用 ESM
切勿这样做
- 切勿将新的
rollupOptions/esbuild示例作为首选的 Vite 8 方案 - 切勿将
handleHotUpdate视为 Vite 8 面向未来的 HMR 钩子 - 切勿假设单一的客户端/SSR 划分足以覆盖所有运行时
- 切勿建议将 CommonJS 配置作为新 Vite 项目的默认方案
- SSR 依赖出现异常时,切勿跳过对
ssr.noExternal的检查
常见错误
错误 - 旧版构建配置:
export default defineConfig({
build: {
rollupOptions: {
external: ['react'],
},
},
esbuild: {
jsxInject: "import React from 'react'",
},
});
正确 - Vite 8 配置:
export default defineConfig({
build: {
rolldownOptions: {
external: ['react'],
},
},
oxc: {
jsxInject: "import React from 'react'",
},
});
原因: Vite 8 已将首选的构建和转换配置接口转向 Rolldown 和 Oxc。
错误 - 过时的 HMR 钩子:
export default function plugin() {
return {
name: 'old-hmr',
handleHotUpdate(ctx) {
return ctx.modules;
},
};
}
正确 - 环境感知的 HMR:
export default function plugin() {
return {
name: 'env-hmr',
hotUpdate(ctx) {
return ctx.modules;
},
};
}
原因: hotUpdate 是 Vite 8 面向环境感知的方向,而 handleHotUpdate 面向旧版模式。
已知问题预防
| 问题 | 根本原因 | 解决方案 |
|---|---|---|
| 配置迁移停滞 | 复制沿用了旧版 Rollup/esbuild 设置 | 迁移到 rolldownOptions 和 oxc |
| 插件逻辑在非标准运行时中失效 | 插件假设只有客户端/SSR | 使用具名 environments 和 this.environment |
| HMR 自定义难以维护 | 沿用了旧版 HMR 钩子 | 优先使用 hotUpdate 和感知环境的流程 |
| SSR 依赖崩溃 | 外部化假设有误 | 检查 ssr.noExternal 和运行时特定需求 |
| 开发/构建行为不一致 | 配置忽略了 Vite 8 的统一引擎模型 | 在 Rolldown 下验证 vite dev 和 vite build |
| 插件性能下降 | 在 JS 侧的钩子中执行了过多工作 | 添加钩子过滤器并缩小匹配范围 |
| 冷启动缓慢 | 繁重的热点路径未预热,且导入图过于复杂 | 检查 server.warmup、显式扩展名和 barrel 文件的使用 |
打包资源
参考资料
- 核心配置和 CLI 模式 →
references/core-config-reference.md - 编写感知环境的插件 →
references/plugin-environment-reference.md - 构建、SSR 和迁移指南 →
references/build-ssr-migration-reference.md - 性能和开发服务器启发式 →
references/performance-devserver-reference.md - 参考资料索引 →
references/README.md
配置参考
vite.config.ts
import { defineConfig } from 'vite';
export default defineConfig({
build: {
target: 'baseline-widely-available',
rolldownOptions: {
output: {
chunkFileNames: 'assets/[name]-[hash].js',
},
},
},
oxc: {
jsxInject: "import React from 'react'",
},
environments: {
ssr: {
resolve: {
conditions: ['node'],
},
},
},
css: {
lightningcss: {},
},
});
关键设置:
build.rolldownOptions:Vite 8 首选的构建自定义接口oxc:新版 Vite 8 示例中首选的 JS/TS 转换配置接口environments:当客户端/SSR/类边缘运行环境的行为存在差异时使用css.lightningcss:体现了 Vite 8 现代化的 CSS 处理方向server.warmup:适用于大型应用,可在冷启动时反复访问相同热点文件的场景
项目结构
my-app/
├── src/
├── index.html
├── vite.config.ts
├── package.json
└── tsconfig.json
为何重要: Vite 8 仍然推崇简单、明确的项目布局。复杂性应来自运行时环境和插件边界,而不是隐藏核心配置。
性能启发式: 如果启动体验不佳,应先检查导入图结构,再考虑不常见的打包器标志。与其再增加一层巧妙的配置,不如优先检查 barrel 文件、缺失的扩展名和未配置预热等问题。
常见模式
感知环境的插件模式
import type { Plugin } from 'vite';
export function envAwarePlugin(): Plugin {
return {
name: 'env-aware-plugin',
transform: {
filter: {
id: /\.(ts|tsx)$/,
},
handler(code, id) {
return {
code,
map: null,
};
},
},
configEnvironment(name) {
if (name === 'ssr') {
return {
resolve: {
conditions: ['node'],
},
};
}
},
};
}
SSR 构建模式
vite build
vite build --ssr src/entry-server.ts
vite preview
Module Runner 心智模型
// Pseudocode sketch
const mod = await moduleRunner.import('/src/entry-server.ts');
当现代 Vite SSR 调试实际涉及运行时执行边界,而非普通打包时,请使用此模型。
依赖项
必需
| 包 | 版本 | 用途 |
|---|---|---|
vite | ^8 | 构建工具、开发服务器、插件宿主 |
node | >=20.19 or >=22.12 | Vite 8 所需的运行时 |
可选
| 包 | 版本 | 用途 |
|---|---|---|
typescript | latest | 为 vite.config.ts 和插件开发提供类型支持 |
| framework plugin packages | latest | React/Vue/Svelte 等集成 |
官方文档
故障排除
旧配置键不再合适
症状: 配置可以运行,但看起来像 Vite 8 之前的代码,或者新选项未按预期生效。
解决方案:
build: {
rolldownOptions: {},
}
oxc: {}
SSR 运行时行为不明确
症状: 构建成功,但运行时执行效果因环境或平台而异。
解决方案:
在更改无关的打包器设置之前,先检查 environments、this.environment、Module Runner 的预期行为以及 ssr.noExternal。
插件钩子运行缓慢或产生过多干扰
症状: 自定义插件在开发或构建过程中增加了开销。
解决方案: 使用钩子过滤器和范围更精确的匹配模式,确保只有相关文件会跨越 Rust↔JS 边界。
设置检查清单
使用此技能之前,请确认:
-
vite属于 Vite 8 发布系列 - Node 满足 Vite 8 的运行时要求
-
vite.config.ts采用 ESM/TypeScript 优先的方式 - 已检查旧版
rollupOptions/esbuild的用法 - 涉及 SSR/边缘运行时时,已明确建模特定环境的行为