diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 864fbc32..0041768a 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -241,7 +241,7 @@ export default defineConfig({ link: '/guide/philosophy', }, { - text: '从 v3 迁移', + text: '从 v4 迁移', link: '/guide/migration' }, ], diff --git a/config/build-options.md b/config/build-options.md index 5a928d0d..41a76616 100644 --- a/config/build-options.md +++ b/config/build-options.md @@ -43,7 +43,7 @@ type ResolveModulePreloadDependenciesFn = ( context: { importer: string }, -) => (string | { runtime?: string })[] +) => string[] ``` `resolveDependencies` 函数将为每个动态导入调用,同时带着一个它所依赖的 chunk 列表。并且它还会为每个在入口 HTML 文件中导入的 chunk 调用。 可以返回一个新的依赖关系数组,可能被过滤后变少了,也可能有更多依赖注入进来了,同时它们的路径也被修改过。`deps` 路径是相对于 `build.outDir` 的。若在注入该模块到 HTML head 时使用 `new URL(dep, import.meta.url)` 获取绝对路径,则对于 `hostType === 'js'`,允许返回一个相对于 `hostId` 的路径。 @@ -186,7 +186,7 @@ Git LFS 占位符会自动排除在内联之外,因为它们不包含它们所 - **类型:** `boolean` - **默认:** `false` -在 SSR 构建过程中,静态资源不会输出,因为其通常被认为会当作客户端构建的一部分输出。这个选项允许框架强制在客户端和 SSR 构建中都输出它们。将静态资源在构建后合并是框架的责任。 +在 SSR 构建期间,静态资源不会被输出,因为它们通常被认为是客户端构建的一部分。这个选项允许框架强制在客户端和 SSR 构建中都输出它们。将静态资源在构建后合并是框架的责任。 ## build.minify {#build-minify} @@ -209,6 +209,8 @@ npm add -D terser 传递给 Terser 的更多 [minify 选项](https://terser.org/docs/api-reference#minify-options)。 +此外,你还可以传递一个 `maxWorkers: number` 选项来指定最大的工作线程数。默认为 CPU 核心数减 1。 + ## build.write {#build-write} - **类型:** `boolean` diff --git a/config/server-options.md b/config/server-options.md index fa87aac7..49564698 100644 --- a/config/server-options.md +++ b/config/server-options.md @@ -180,25 +180,16 @@ Direct websocket connection fallback. Check out https://vitejs.dev/config/server 传递给 [chokidar](https://github.com/paulmillr/chokidar#api) 的文件系统监听器选项。 -Vite 服务器默认会忽略对 `.git/` 和 `node_modules/` 目录的监听。如果你需要对 `node_modules/` 内的包进行监听,你可以为 `server.watch.ignored` 赋值一个取反的 glob 模式,例如: - -```js -export default defineConfig({ - server: { - watch: { - ignored: ['!**/node_modules/your-package-name/**'], - }, - }, - // 被监听的包必须被排除在优化之外, - // 以便它能出现在依赖关系图中并触发热更新。 - optimizeDeps: { - exclude: ['your-package-name'], - }, -}) -``` +Vite 服务器的文件监听器默认会监听 `root` 目录,同时会跳过 `.git/` 和 `node_modules/` 目录。当监听到文件更新时,Vite 会应用 HMR 并且只在需要时更新页面。 如果设置为 `null`,则不会监听任何文件。`server.watcher` 将提供一个兼容的事件发射器,但是调用 `add` 或 `unwatch` 将没有任何效果。 +::: warning 监听 `node_modules` 中的文件 + +目前没有可行的方式来监听 `node_modules` 中的文件。若要了解更多详情和可能的临时替代方案,你可以关注 [issue #8619](https://github.com/vitejs/vite/issues/8619)。 + +::: + ::: warning 在 Windows Linux 子系统(WSL)上使用 Vite 当需要再 Windows Subsystem for Linux (WSL) 2 上运行 Vite 时,如果项目文件夹位于 Windows 文件系统中,你需要将此选项设置为 `{ usePolling: true }`。这是由于 Windows 文件系统的 [WSL2 限制](https://github.com/microsoft/WSL/issues/4739) 造成的。 diff --git a/config/ssr-options.md b/config/ssr-options.md index 4380ecd7..c2ce560d 100644 --- a/config/ssr-options.md +++ b/config/ssr-options.md @@ -20,3 +20,19 @@ - **默认:** `node` SSR 服务器的构建目标。 + +## ssr.resolve.conditions {#ssr-resolve-conditions} + +- **类型:** `string[]` +- **相关:** [解析情景](./shared-options.md#resolve-conditions) + +在 SSR 构建中,包入口的解析条件。默认为 [`resolve.conditions`](./shared-options.md#resolve-conditions)。 + +这些条件会在插件管道中使用,并且只会影响 SSR 构建期间的非外部化依赖项。使用 `ssr.resolve.externalConditions` 来影响外部化导入。 + +## ssr.resolve.externalConditions {#ssr-resolve-externalconditions} + +- **类型:** `string[]` +- **默认:** `[]` + +在 SSR 导入(包括 `ssrLoadModule`)外部化依赖项时使用的条件。 diff --git a/guide/api-hmr.md b/guide/api-hmr.md index f3051b59..710cdb51 100644 --- a/guide/api-hmr.md +++ b/guide/api-hmr.md @@ -37,6 +37,10 @@ interface ViteHotContext { event: T, cb: (payload: InferCustomEventPayload) => void, ): void + off( + event: T, + cb: (payload: InferCustomEventPayload) => void, + ): void send(event: T, data?: InferCustomEventPayload): void } ``` @@ -179,7 +183,11 @@ import.meta.hot.accept((module) => { 自定义 HMR 事件可以由插件发送。更多细节详见 [handleHotUpdate](./api-plugin#handleHotUpdate)。 -## `hot.send(event, data)` {##hot-send-event-data} +## `hot.off(event, cb)` {#hot-offevent-cb} + +从事件监听器中移除回调函数。 + +## `hot.send(event, data)` {#hot-send-event-data} 发送自定义事件到 Vite 开发服务器。 diff --git a/guide/dep-pre-bundling.md b/guide/dep-pre-bundling.md index 86a0e152..8a0c35fe 100644 --- a/guide/dep-pre-bundling.md +++ b/guide/dep-pre-bundling.md @@ -52,10 +52,6 @@ export default defineConfig({ 当对链接的依赖进行更改时,请使用 `--force` 命令行选项重新启动开发服务器,以使更改生效。 -::: warning 重复删除 -由于链接的依赖项解析方式不同,传递依赖项(transitive dependencies)可能会被错误地去重,从而在运行时出现问题。如果遇到此问题,请使用 `npm pack` 命令来修复它。 -::: - ## 自定义行为 {#customizing-the-behavior} 有时候默认的依赖启发式算法(discovery heuristics)可能并不总是理想的。如果您想要明确地包含或排除依赖项,可以使用 [`optimizeDeps` 配置项](/config/dep-optimization-options.md) 来进行设置。 diff --git a/guide/migration-from-v3.md b/guide/migration-from-v3.md new file mode 100644 index 00000000..c89fbb32 --- /dev/null +++ b/guide/migration-from-v3.md @@ -0,0 +1,69 @@ +# 从 v3 迁移 {#migration-from-v3} + +## Rollup 3 {#rollup-3} + +Vite 现在正式启用 [Rollup 3](https://github.com/vitejs/vite/issues/9870),这使得我们可以简化 Vite 内部的资源处理并同时拥有许多改进。详情请查看 [Rollup 3 版本记录](https://github.com/rollup/rollup/releases/tag/v3.0.0)。 + +Rollup 3 尽最大可能兼容了 Rollup 2。如果你在项目中使用了自定义的 [`rollupOptions`](../config/build-options.md#rollup-options) 并(升级后)遇到了问题,请先查看 [Rollup 迁移指南](https://rollupjs.org/migration/) 来更新升级你的配置。 + +## 现代浏览器基准线变化 {#modern-browser-baseline-change} + +当前对于现代浏览器的构建目标及现调整为了默认 `safari14` 以求更广的 ES2020 兼容性(从 `safari13` 升级)。这意味着现代化构建现在可以使用 [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt),同时 [空值合并运算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing) 将不再被转译。如果你需要支持更旧版本的浏览器,你可以照常添加 [`@vitejs/plugin-legacy`](https://github.com/vitejs/vite/tree/main/packages/plugin-legacy)。 + +## 其他一般性变化 {#general-changes} + +### 编码 {#encoding} + +构建的默认字符集现在是 utf8(查看 [#10753](https://github.com/vitejs/vite/issues/10753) 了解更多细节)。 + +### 以字符串形式导入 CSS {#importing-css-as-a-string} + +在过往的 Vite 3 之中,以默认导入形式导入一个 `.css` 文件的可能会造成对 CSS 的双重加载。 + +In Vite 4, the manifest files (`build.manifest`, `build.ssrManifest`) was generated in the root of `build.outDir` by default. From Vite 5, those will be generated in the `.vite` directory in the `build.outDir` by default. + +这种双重加载出现的原因是 `.css` 文件是将会被释放(emit)到最终产物的,并且很可能 CSS 字符串将会在应用代码中被使用到,就比如被框架运行时注入的时候。对于现在的 Vite 4,`.css` 默认导出 [已经被废弃](https://github.com/vitejs/vite/issues/11094)。在这种情况下你将需要使用 `?inline` 这个查询参数后缀,而这时将不会将导入的 `.css` 样式文件释放到最终产物。 + +CLI shortcuts, like `r` to restart the dev server, now require an additional `Enter` press to trigger the shortcut. For example, `r + Enter` to restart the dev server. + +### 默认情况下的生产构建 {#production-builds-by-default} + +不管所传递的 `--mode` 是什么,`vite build` 总是构建生产版本。之前,若将 `mode` 改为 `production` 之外的模式会构建开发版本,如果现在希望用于开发构建,可以在 `.env.{mode}` 文件中设置 `NODE_ENV=development`。 + +在本次变动中,如果 `process.env.NODE_ENV` 已经被定义,`vite dev` 和 `vite build` 将不再覆盖它。所以如果在构建前设置了 `process.env.NODE_ENV = 'development'`,将会构建开发版本。这在并行执行多个构建或开发服务器时提供了更多的控制权。 + +请参阅更新后的 [`mode` 文档](/guide/env-and-mode.md#modes) 了解更多详细信息。 + +### 环境变量 {#environment-variables} + +Vite 现在使用 `dotenv` 16 和 `dotenv-expand` 9(之前是 `dotenv` 14 和 `dotenv-expand` 5)如果你有一个包含 `#` 或者 `` ` `` 的值,你将需要将它们以双引号包裹起来。 + +```diff +-VITE_APP=ab#cd`ef ++VITE_APP="ab#cd`ef" +``` + +了解更多详情,请查看 [`dotenv`](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) 和 [`dotenv-expand` 更新日志](https://github.com/motdotla/dotenv-expand/blob/master/CHANGELOG.md)。 + +## 进阶 {#advanced} + +下列改动仅会影响到插件/工具的作者: + +- [[#11036] feat(client)!: remove never implemented hot.decline](https://github.com/vitejs/vite/issues/11036) + - 使用 `hot.invalidate` 来代替 +- [[#9669] feat: align object interface for `transformIndexHtml` hook](https://github.com/vitejs/vite/issues/9669) + - 使用 `order` 来代替 `enforce` + +此外,还有其他一些只影响少数用户的破坏性变化。 + +- [[#11101] feat(ssr)!: remove dedupe and mode support for CJS](https://github.com/vitejs/vite/pull/11101) + - 您应该迁移到 SSR 的默认 ESM 模式,CJS SSR 支持可能会在下一个 Vite 主要版本删除。 +- [[#10475] feat: handle static assets in case-sensitive manner](https://github.com/vitejs/vite/pull/10475) + - 您的项目不应该依赖于会被不同操作系统忽略大小写的文件名。 +- [[#10996] fix!: make `NODE_ENV` more predictable](https://github.com/vitejs/vite/pull/10996) + - 有关此更改的解释,请参阅 PR。 +- [[#10903] refactor(types)!: remove facade type files](https://github.com/vitejs/vite/pull/10903) + +## 从 v2 迁移 {#migration-from-v2} + +请先查看之前 Vite v3 文档中的 [从 v2 迁移指南](https://cn.vitejs.dev/guide/migration-from-v2.html) 了解迁移到 v3 所需要的更改,然后再继续执行本页提到的相关更改。 diff --git a/guide/migration.md b/guide/migration.md index 7cda5607..5019a2da 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -1,73 +1,65 @@ -# 从 v3 迁移 {#migration-from-v3} +# Migration from v4 {#migration-from-v4} -## Rollup 3 {#rollup-3} +## Node.js 支持 {#nodejs-support} -Vite 现在正式启用 [Rollup 3](https://github.com/vitejs/vite/issues/9870),这使得我们可以简化 Vite 内部的资源处理并同时拥有许多改进。详情请查看 [Rollup 3 版本记录](https://github.com/rollup/rollup/releases/tag/v3.0.0)。 +Vite 不再支持 Node.js 14 / 16 / 17 / 19,因为它们已经到了 EOL。现在需要 Node.js 18 / 20+。 -Rollup 3 尽最大可能兼容了 Rollup 2。如果你在项目中使用了自定义的 [`rollupOptions`](../config/build-options.md#rollup-options) 并(升级后)遇到了问题,请先查看 [Rollup 迁移指南](https://rollupjs.org/migration/) 来更新升级你的配置。 +## 废弃 CJS Node API {#deprecate-cjs-node-api} -## 现代浏览器基准线变化 {#modern-browser-baseline-change} +CJS 的 Node API 已经被废弃。当调用 `require('vite')` 时,将会记录一个废弃警告。你应该更新你的文件或框架来导入 Vite 的 ESM 构建。 -当前对于现代浏览器的构建目标及现调整为了默认 `safari14` 以求更广的 ES2020 兼容性(从 `safari13` 升级)。这意味着现代化构建现在可以使用 [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt),同时 [空值合并运算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing) 将不再被转译。如果你需要支持更旧版本的浏览器,你可以照常添加 [`@vitejs/plugin-legacy`](https://github.com/vitejs/vite/tree/main/packages/plugin-legacy)。 +在一个基础的 Vite 项目中,请确保: -## 其他一般性变化 {#general-changes} - -### 编码 {#encoding} +1. `vite.config.js` 配置文件的内容使用 ESM 语法。 +2. 最近的 `package.json` 文件中有 `"type": "module"`,或者使用 `.mjs` 扩展名,例如 `vite.config.mjs`。 -构建的默认字符集现在是 utf8(查看 [#10753](https://github.com/vitejs/vite/issues/10753) 了解更多细节)。 +对于其他项目,有几种常见的方法: -### 以字符串形式导入 CSS {#importing-css-as-a-string} +- **配置 ESM 为默认,如果需要则选择 CJS:** 在项目 `package.json` 中添加 `"type": "module"`。所有 `*.js` 文件现在都被解释为 ESM,并且需要使用 ESM 语法。你可以将一个文件重命名为 `.cjs` 扩展名来继续使用 CJS。 +- **保持 CJS 为默认,如果需要则选择 ESM:** 如果项目 `package.json` 没有 `"type": "module"`,所有 `*.js` 文件都被解释为 CJS。你可以将一个文件重命名为 `.mjs` 扩展名来使用 ESM。 +- **动态导入 Vite:** 如果你需要继续使用 CJS,你可以使用 `import('vite')` 动态导入 Vite。这要求你的代码必须在一个 `async` 上下文中编写,但是由于 Vite 的 API 大多是异步的,所以应该还是可以管理的。 -在过往的 Vite 3 之中,以默认导入形式导入一个 `.css` 文件的可能会造成对 CSS 的双重加载。 +查看 [排错指南](https://cn.vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated) 获取更多信息。 -```ts -import cssString from './global.css' -``` +## 其他一般性变化 {#general-changes} -这种双重加载出现的原因是 `.css` 文件是将会被释放(emit)到最终产物的,并且很可能 CSS 字符串将会在应用代码中被使用到,就比如被框架运行时注入的时候。对于现在的 Vite 4,`.css` 默认导出 [已经被废弃](https://github.com/vitejs/vite/issues/11094)。在这种情况下你将需要使用 `?inline` 这个查询参数后缀,而这时将不会将导入的 `.css` 样式文件释放到最终产物。 +### 允许路径包含 `.` 回退到 index.html {#allow-path-containing-to-fallback-to-index-html} -```ts -import stuff from './global.css?inline' -``` +在 Vite 4 中,即使 `appType` 被设置为 `'SPA'`(默认),访问包含 `.` 的路径也不会回退到 index.html。从 Vite 5 开始,它将会回退到 index.html。 -### 默认情况下的生产构建 {#production-builds-by-default} +注意浏览器将不再在控制台中显示 404 错误消息,如果你将图片路径指向一个不存在的文件(例如 ``)。 -不管所传递的 `--mode` 是什么,`vite build` 总是构建生产版本。之前,若将 `mode` 改为 `production` 之外的模式会构建开发版本,如果现在希望用于开发构建,可以在 `.env.{mode}` 文件中设置 `NODE_ENV=development`。 +### Manifest 文件现在默认生成到 `.vite` 目录中 {#manifest-files-are-now-generated-in-vite-directory-by-default} -在本次变动中,如果 `process.env.NODE_ENV` 已经被定义,`vite dev` 和 `vite build` 将不再覆盖它。所以如果在构建前设置了 `process.env.NODE_ENV = 'development'`,将会构建开发版本。这在并行执行多个构建或开发服务器时提供了更多的控制权。 +在 Vite 4 中,manifest 文件(`build.manifest`,`build.ssrManifest`)默认会生成在 `build.outDir` 的根目录中。从 Vite 5 开始,这些文件将默认生成在 `build.outDir` 中的 `.vite` 目录中。 -请参阅更新后的 [`mode` 文档](/guide/env-and-mode.md#modes) 了解更多详细信息。 +### CLI 快捷功能键需要一个额外的 `Enter` 按键 {#cli-shortcuts-require-an-additional-enter-press} -### 环境变量 {#environment-variables} +CLI 快捷功能键,例如 `r` 重启开发服务器,现在需要额外的 `Enter` 按键来触发快捷功能。例如,`r + Enter` 重启开发服务器。 -Vite 现在使用 `dotenv` 16 和 `dotenv-expand` 9(之前是 `dotenv` 14 和 `dotenv-expand` 5)如果你有一个包含 `#` 或者 `` ` `` 的值,你将需要将它们以双引号包裹起来。 +这个改动防止 Vite 吞噬和控制操作系统特定的快捷键,允许更好的兼容性,当将 Vite 开发服务器与其他进程结合使用时,并避免了[之前的注意事项](https://github.com/vitejs/vite/pull/14342)。 -```diff --VITE_APP=ab#cd`ef -+VITE_APP="ab#cd`ef" -``` +## 移除部分废弃 API -了解更多详情,请查看 [`dotenv`](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) 和 [`dotenv-expand` 更新日志](https://github.com/motdotla/dotenv-expand/blob/master/CHANGELOG.md)。 +- CSS 文件的默认导出(例如 `import style from './foo.css'`):使用 `?inline` 查询参数代替 +- `import.meta.globEager`:使用 `import.meta.glob('*', { eager: true })` 来代替 +- `ssr.format: 'cjs'` 和 `legacy.buildSsrCjsExternalHeuristics`([#13816](https://github.com/vitejs/vite/discussions/13816)) ## 进阶 {#advanced} 下列改动仅会影响到插件/工具的作者: -- [[#11036] feat(client)!: remove never implemented hot.decline](https://github.com/vitejs/vite/issues/11036) - - 使用 `hot.invalidate` 来代替 -- [[#9669] feat: align object interface for `transformIndexHtml` hook](https://github.com/vitejs/vite/issues/9669) - - 使用 `order` 来代替 `enforce` +- [[#14119] refactor!: merge `PreviewServerForHook` into `PreviewServer` type](https://github.com/vitejs/vite/pull/14119) 此外,还有其他一些只影响少数用户的破坏性变化。 -- [[#11101] feat(ssr)!: remove dedupe and mode support for CJS](https://github.com/vitejs/vite/pull/11101) - - 您应该迁移到 SSR 的默认 ESM 模式,CJS SSR 支持可能会在下一个 Vite 主要版本删除。 -- [[#10475] feat: handle static assets in case-sensitive manner](https://github.com/vitejs/vite/pull/10475) - - 您的项目不应该依赖于会被不同操作系统忽略大小写的文件名。 -- [[#10996] fix!: make `NODE_ENV` more predictable](https://github.com/vitejs/vite/pull/10996) - - 有关此更改的解释,请参阅 PR。 -- [[#10903] refactor(types)!: remove facade type files](https://github.com/vitejs/vite/pull/10903) +- [[#14098] fix!: avoid rewriting this (reverts #5312)](https://github.com/vitejs/vite/pull/14098) + - 之前顶层 `this` 将会在构建时被默认地改写为 `globalThis`,这个行为现在已被移除 +- [[#14231] feat!: add extension to internal virtual modules](https://github.com/vitejs/vite/pull/14231) + - 内置虚拟模块的 id 现在包含一个扩展名(`.js`) +- [[#5657] fix: return 404 for resources requests outside the base path](https://github.com/vitejs/vite/pull/5657) + - 过去,Vite 对于不带 `Accept: text/html` 的请求,会将其当作带有基础路径的请求来处理。现在 Vite 不再这样做,而是返回 404。 -## 从 v2 迁移 {#migration-from-v2} +## 从 v3 迁移 {#migration-from-v3} -请先查看之前 Vite v3 文档中的 [Migration from v2 Guide](https://cn.vitejs.dev/guide/migration-from-v2.html) 了解迁移到 v3 所需要的更改,然后再继续执行本页提到的相关更改。 +请先查看 [从 v3 迁移指南](https://cn.vitejs.dev/guide/migration-from-v3.html) 文档查看对您的应用所有需要迁移的改动,然后再执行本篇指南所述的改动。 diff --git a/guide/ssr.md b/guide/ssr.md index 44101e9a..63998c2c 100644 --- a/guide/ssr.md +++ b/guide/ssr.md @@ -259,6 +259,11 @@ SSR 构建的默认目标为 node 环境,但你也可以让服务运行在 Web - 将所有依赖视为 `noExternal`(非外部化) - 若任何 Node.js 内置内容被引入,将抛出一个错误 +## SSR Resolve Conditions + +By default package entry resolution will use the conditions set in [`resolve.conditions`](../config/shared-options.md#resolve-conditions) for the SSR build. You can use [`ssr.resolve.conditions`](../config/ssr-options.md#ssr-resolve-conditions) and [`ssr.resolve.externalConditions`](../config/ssr-options.md#ssr-resolve-externalconditions) to customize this behavior. +默认情况下包的入口解析将会使用 [`resolve.conditions`](../config/shared-options.md#resolve-conditions) 中设置的条件来进行 SSR 构建。你可以使用 [`ssr.resolve.conditions`](../config/ssr-options.md#ssr-resolve-conditions) 和 [`ssr.resolve.externalConditions`](../config/ssr-options.md#ssr-resolve-externalconditions) 来自定义这个行为。 + ## Vite CLI {#vite-cli} CLI 命令 `$ vite dev` 和 `$ vite preview` 也可以用于 SSR 应用:你可以将你的 SSR 中间件通过 [`configureServer`](/guide/api-plugin#configureserver) 添加到开发服务器、以及通过 [`configurePreviewServer`](/guide/api-plugin#configurepreviewserver) 添加到预览服务器。 diff --git a/guide/static-deploy.md b/guide/static-deploy.md index d1c56fdc..e6cac47f 100644 --- a/guide/static-deploy.md +++ b/guide/static-deploy.md @@ -233,7 +233,7 @@ $ wrangler login $ npm run build # 创建一个新的部署 -$ npx wrangler pages publish dist +$ npx wrangler pages deploy dist ``` 在你的资产上传后,Wrangler 会给你一个预览 URL 来检查你的网站。当你登录到 Cloudflare Pages 仪表板时,你会看到你的新项目。 @@ -334,7 +334,7 @@ $ npx wrangler pages publish dist 还可以为项目添加一个 [自定义域名](https://render.com/docs/custom-domains)。 -## Flightcontrol +## Flightcontrol {#flightcontrol} 使用 [Flightcontrol](https://www.flightcontrol.dev/?ref=docs-vite) 部署静态站点,可以按照 [说明](https://www.flightcontrol.dev/docs/reference/examples/vite?ref=docs-vite) 进行操作。 diff --git a/guide/troubleshooting.md b/guide/troubleshooting.md index 88c10ca3..0947453c 100644 --- a/guide/troubleshooting.md +++ b/guide/troubleshooting.md @@ -1,9 +1,38 @@ -# 故障排除 {#troubleshooting} +# 排错指南 {#troubleshooting} > 你还可以查看 [Rollup 的故障排除指南](https://rollupjs.org/troubleshooting/) 了解更多。 如果这里的建议并未帮助到你,请将你的问题发送到 [GitHub 讨论区](https://github.com/vitejs/vite/discussions) 或 [Vite Land Discord](https://chat.vitejs.dev) 的 `#help` 频道。 +## CJS + +### Vite CJS Node API deprecated {#vite-cjs-node-api-deprecated} + +Vite 的 CJS Node API 构建已经被废弃,并将在 Vite 6 中移除。查看 [GitHub 讨论区](https://github.com/vitejs/vite/discussions/13928) 了解更多背景信息。你应该更新你的文件或框架来导入 Vite 的 ESM 构建。 + +在一个基础的 Vite 项目中,请确保: + +1. `vite.config.js` 配置文件的内容使用 ESM 语法。 +2. 最近的 `package.json` 文件中有 `"type": "module"`,或者使用 `.mjs` 扩展名,例如 `vite.config.mjs`。 + +对于其他项目,有几种常见的方法: + +- **配置 ESM 为默认,如果需要则选择 CJS:** 在项目 `package.json` 中添加 `"type": "module"`。所有 `*.js` 文件现在都被解释为 ESM,并且需要使用 ESM 语法。你可以将一个文件重命名为 `.cjs` 扩展名来继续使用 CJS。 +- **保持 CJS 为默认,如果需要则选择 ESM:** 如果项目 `package.json` 没有 `"type": "module"`,所有 `*.js` 文件都被解释为 CJS。你可以将一个文件重命名为 `.mjs` 扩展名来使用 ESM。 +- **动态导入 Vite:** 如果你需要继续使用 CJS,你可以使用 `import('vite')` 动态导入 Vite。这要求你的代码必须在一个 `async` 上下文中编写,但是由于 Vite 的 API 大多是异步的,所以应该还是可以管理的。 + +如果你不确定警告来自哪里,你可以通过 `VITE_CJS_TRACE=true` 标志运行你的脚本来记录堆栈跟踪: + +```bash +VITE_CJS_TRACE=true vite dev +``` + +如果你想暂时忽略警告,你可以通过 `VITE_CJS_IGNORE_WARNING=true` 标志运行你的脚本: + +```bash +VITE_CJS_IGNORE_WARNING=true vite dev +``` + ## CLI {#cli} ### `Error: Cannot find module 'C:\foo\bar&baz\vite\bin\vite.js'` {#error-cannot-find-module-cfoobarbazvitebinvitejs} diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 00000000..1333c17f --- /dev/null +++ b/public/_redirects @@ -0,0 +1,2 @@ +# temporary, we'll flip this around some day +https://vite.dev/* https://vitejs.dev/:splat 302!