Skip to content

dev merge into main #1194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Mar 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,9 +374,13 @@ export default defineConfig({
text: '性能',
link: '/guide/performance',
},
{
text: 'Rolldown',
link: '/guide/rolldown',
},
{
text: '从 v5 迁移',
link: '/guide/migration'
link: '/guide/migration',
},
{
text: '破坏性变更',
Expand Down
43 changes: 42 additions & 1 deletion guide/api-environment-frameworks.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,48 @@ if (isRunnableDevEnvironment(server.environments.ssr)) {
```

:::warning
首次访问 `runner` 时,它会被立即执行。请注意,当通过调用 `process.setSourceMapsEnabled` 或在不支持的情况下重写 `Error.prepareStackTrace` 创建 `runner` 时,Vite 会启用源映射支持。
只有在第一次使用时,`runner` 才会被加载。请注意,当通过调用 `process.setSourceMapsEnabled` 或在不支持的情况下重写 `Error.prepareStackTrace` 创建 `runner` 时,Vite 会启用源映射支持。
:::

那些通过 [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch) 与它们的运行环境进行交互的框架可以使用 `FetchableDevEnvironment`,它提供了一种标准化的方式来通过 `handleRequest` 方法处理请求:

```ts
import {
createServer,
createFetchableDevEnvironment,
isFetchableDevEnvironment,
} from 'vite'

const server = await createServer({
server: { middlewareMode: true },
appType: 'custom',
environments: {
custom: {
dev: {
createEnvironment(name, config) {
return createFetchableDevEnvironment(name, config, {
handleRequest(request: Request): Promise<Response> | Response {
// 处理请求并返回响应
},
})
},
},
},
},
})

// 现在,任何使用环境 API 的人都可以调用 `dispatchFetch`
if (isFetchableDevEnvironment(server.environments.custom)) {
const response: Response = await server.environments.custom.dispatchFetch(
new Request('/request-to-handle'),
)
}
```

:::warning
Vite 会检查 `dispatchFetch` 方法的输入和输出:请求必须是全局 `Request` 类的一个实例,而响应必须是全局 `Response` 类的一个实例。如果不满足这些条件,Vite 将会抛出一个 `TypeError`。

尽管 `FetchableDevEnvironment` 是作为一个类来实现的,但请注意,Vite 团队可能会随时更改它,因为其被视为实现细节部分。
:::

## 默认 `RunnableDevEnvironment` {#default-runnabledevenvironment}
Expand Down
6 changes: 6 additions & 0 deletions guide/env-and-mode.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ VITE_BAR=bar
```typescript [vite-env.d.ts]
/// <reference types="vite/client" />

interface ViteTypeOptions {
// 添加这行代码,你就可以将 ImportMetaEnv 的类型设为严格模式,
// 这样就不允许有未知的键值了。
// strictImportMetaEnv: unknown
}

interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
// 更多环境变量...
Expand Down
1 change: 1 addition & 0 deletions guide/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,5 +122,6 @@ export default defineConfig({

使用更原生化的工具链往往会带来更大的安装大小,因此在启动新的 Vite 项目时不是默认的。但对于较大的应用程序来说,这可能是值得的。

- 使用 [Rolldown 而不是 Rollup 和 esbuild](./rolldown) 以获得更快的构建速度和在开发和构建之间更一致的体验。
- 尝试实验性的 [LightningCSS](https://github.com/vitejs/vite/discussions/13835)
- 使用 [`@vitejs/plugin-react-swc`](https://github.com/vitejs/vite-plugin-react-swc) 代替 `@vitejs/plugin-react`。
93 changes: 93 additions & 0 deletions guide/rolldown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Rolldown 集成 {#rolldown-integration}

Vite 计划将由 Rust 驱动的 JavaScript 打包工具 [Rolldown](https://rolldown.rs) 集成进来,以提升构建的性能和功能。

## Rolldown 是什么? {#what-is-rolldown}

Rolldown 是一个现代化、高性能的 JavaScript 打包工具,由 Rust 编写。它被设计为 Rollup 的替代品,旨在保持与现有生态系统兼容的同时,显著提升性能。

Rolldown 专注于三个主要原则:

- **速度**:利用 Rust 的高性能进行构建
- **兼容性**:能够与现有的 Rollup 插件一起工作
- **开发者体验**:为 Rollup 用户提供熟悉的 API

## 为什么 Vite 要迁移到 Rolldown {#why-vite-is-migrating-to-rolldown}

1. **统一**:Vite 目前使用 esbuild 进行依赖预打包,使用 Rollup 进行生产构建。Rolldown 的目标是将这两个过程统一到一个高性能的打包工具中,以降低复杂性。

2. **性能**:Rolldown 的 Rust 实现在性能上比基于 JavaScript 的打包工具有显著的提升。虽然具体的基准测试可能会因项目大小和复杂性而有所不同,但早期的测试显示,与 Rollup 相比,Rolldown 的速度提升是有希望的。

关于 Rolldown 的动机有更多的见解,可以参见 [为什么要构建 Rolldown 的原因](https://rolldown.rs/guide/#why-rolldown)。

## 尝试 `rolldown-vite` 的好处 {#benefits-of-trying-rolldown-vite}

- 对于大型项目,可以显著提升构建速度
- 提供有价值的反馈,帮助塑造 Vite 的打包体验的未来
- 为最终的官方 Rolldown 集成做好准备

## 如何尝试 Rolldown {#how-to-try-rolldown}

目前,由 Rolldown 驱动的 Vite 版本已经作为一个名为 `rolldown-vite` 的独立包发布。你可以通过在你的 `package.json` 中添加 package overrides 来试用它:

:::code-group

```json [npm]
{
"overrides": {
"vite": "npm:rolldown-vite@latest"
}
}
```

```json [Yarn]
{
"resolutions": {
"vite": "npm:rolldown-vite@latest"
}
}
```

```json [pnpm]
{
"pnpm": {
"overrides": {
"vite": "npm:rolldown-vite@latest"
}
}
}
```

```json [Bun]
{
"overrides": {
"vite": "npm:rolldown-vite@latest"
}
}
```

:::

在添加 overrides 之后,重新安装你的依赖并像往常一样启动你的开发服务器或构建你的项目即可,无需进一步的配置更改。

## 已知限制 {#known-limitations}

虽然 Rolldown 的目标是成为 Rollup 的替代品,但还有一些特性正在实现中,以及一些小的有意的行为差异。需要查看完整的列表,请参考 [这个 GitHub PR](https://github.com/vitejs/rolldown-vite/pull/84#issue-2903144667),它会定期更新。

## 反馈问题 {#reporting-issues}

由于这是一个实验性的集成,你可能会遇到一些问题。如果你遇到问题,请在 [`vitejs/rolldown-vite`](https://github.com/vitejs/rolldown-vite) 仓库中反馈,**而不是主 Vite 仓库**。

在 [上报问题](https://github.com/vitejs/rolldown-vite/issues/new) 时,请按照问题模板提供:

- 问题的最小复现
- 你的环境详细信息(操作系统,Node 版本,包管理器)
- 任何相关的错误信息或日志

如果你想进行实时讨论和故障排除,请确保加入 [Rolldown Discord](https://chat.rolldown.rs/)。

## 未来计划 {#future-plans}

`rolldown-vite` 包是一个临时的解决方案,用于收集反馈和稳定 Rolldown 的集成。在未来,这个功能将被合并回主 Vite 仓库。

我们鼓励你尝试 `rolldown-vite` 并通过反馈和问题报告来参与其开发工作。
9 changes: 0 additions & 9 deletions guide/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,6 @@ VITE_CJS_IGNORE_WARNING=true vite dev
- 在邻近的 `package.json` 中添加 `"type": "module"`
- 将 `vite.config.js`/`vite.config.ts` 重命名为 `vite.config.mjs`/`vite.config.mts`

### `failed to load config from '/path/to/config*/vite.config.js'`

> failed to load config from '/path/to/config\*/vite.config.js'
> error when starting dev server:
> Error: Build failed with 1 error:
> error: Must use "outdir" when there are multiple input files

如果项目文件夹的路径中包含 `*`,则可能会发生上述错误,因为 esbuild 将其视为一个 glob 模式。你需要重命名你的目录以移除 `*`。

## 开发服务器 {#dev-server}

### 请求始终停滞 {#requests-are-stalled-forever}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"chalk": "^4.1.2",
"gray-matter": "^4.0.3",
"lodash": "^4.17.21",
"vite": "^6.0.0",
"vite": "^6.3.0-beta.0",
"yorkie": "^2.0.0",
"gsap": "^3.12.4"
},
Expand Down
Loading