|
10 | 10 |
|
11 | 11 | 另一个特殊值是 “esnext” —— 即假设有原生动态导入支持,并且将会转译得尽可能小:
|
12 | 12 |
|
13 |
| -- 如果 [`build.minify`](#build-minify) 选项为 `'terser'`, `'esnext'` 将会强制降级为 `'es2019'`。 |
| 13 | +- 如果 [`build.minify`](#build-minify) 选项为 `'terser'`,`'esnext'` 将会强制降级为 `'es2019'`。 |
14 | 14 | - 其他情况下将完全不会执行转译。
|
15 | 15 |
|
16 | 16 | 转换过程将会由 esbuild 执行,并且此值应该是一个合法的 [esbuild 目标选项](https://esbuild.github.io/api/#target)。自定义目标也可以是一个 ES 版本(例如:`es2015`)、一个浏览器版本(例如:`chrome58`)或是多个目标组成的一个数组。
|
17 | 17 |
|
18 | 18 | 注意:如果代码包含不能被 `esbuild` 安全地编译的特性,那么构建将会失败。查看 [esbuild 文档](https://esbuild.github.io/content-types/#javascript) 获取更多细节。
|
19 | 19 |
|
20 |
| -## build.polyfillModulePreload {#build-polyfillmodulepreload} |
| 20 | +## build.modulePreload {#build-modulepreload} |
21 | 21 |
|
22 |
| -- **类型:** `boolean` |
| 22 | +- **类型:** `boolean | { polyfill?: boolean, resolveDependencies?: ResolveModulePreloadDependenciesFn }` |
23 | 23 | - **默认值:** `true`
|
24 | 24 |
|
25 |
| -用于决定是否自动注入 [module preload 的 polyfill](https://guybedford.com/es-module-preloading-integrity#modulepreload-polyfill). |
26 |
| - |
27 |
| -如果设置为 `true`,此 polyfill 会被自动注入到每个 `index.html` 入口的 proxy 模块中。如果是通过 `build.rollupOptions.input` 将构建配置为使用非 html 的自定义入口,那么则需要在你自定义入口中手动引入 polyfill: |
| 25 | +默认情况下,一个 [模块预加载 polyfill](https://guybedford.com/es-module-preloading-integrity#modulepreload-polyfill) 会被自动注入。该 polyfill 会自动注入到每个 `index.html` 入口的的代理模块中。如果构建通过 `build.rollupOptions.input` 被配置为了使用非 HTML 入口的形式,那么必须要在你的自定义入口中手动引入该 polyfill: |
28 | 26 |
|
29 | 27 | ```js
|
30 | 28 | import 'vite/modulepreload-polyfill'
|
31 | 29 | ```
|
32 | 30 |
|
33 | 31 | 注意:此 polyfill **不适用于** [Library 模式](/guide/build#library-mode)。如果你需要支持不支持动态引入的浏览器,你应该避免在你的库中使用此选项。
|
34 | 32 |
|
| 33 | +此 polyfill 可以通过 `{ polyfill: false }` 来禁用。 |
| 34 | + |
| 35 | +每个动态导入要预加载的块列表将由 Vite 计算。默认情况下,在载入这些依赖时,会使用一个包含 `base` 的绝对路径。如果 `base` 是相对路径(`''` 或者 './'),解析时则会使用 `import.meta.url`,以避免出现依赖于最终部署基路径的绝对路径。 |
| 36 | + |
| 37 | +目前有一个实验性功能支持使用 `resolveDependencies` 函数对依赖项列表及其路径进行细粒度控制。它期望接收一个 `ResolveModulePreloadDependenciesFn` 类型的函数: |
| 38 | + |
| 39 | +```ts |
| 40 | +type ResolveModulePreloadDependenciesFn = ( |
| 41 | + url: string, |
| 42 | + deps: string[], |
| 43 | + context: { |
| 44 | + importer: string |
| 45 | + } |
| 46 | +) => (string | { runtime?: string })[] |
| 47 | +``` |
| 48 | +
|
| 49 | +`resolveDependencies` 函数将为每个动态导入调用,同时带着一个它所依赖的 chunk 列表。并且它还会为每个在入口 HTML 文件中导入的 chunk 调用。 可以返回一个新的依赖关系数组,可能被过滤后变少了,也可能有更多依赖注入进来了,同时它们的路径也被修改过。`deps` 路径是相对于 `build.outDir` 的。若在注入该模块到 HTML head 时使用 `new URL(dep, import.meta.url)` 获取绝对路径,则对于 `hostType === 'js'`,允许返回一个相对于 `hostId` 的路径。 |
| 50 | +
|
| 51 | +```js |
| 52 | +modulePreload: { |
| 53 | + resolveDependencies: (filename, deps, { hostId, hostType }) => { |
| 54 | + return deps.filter(condition) |
| 55 | + } |
| 56 | +} |
| 57 | +``` |
| 58 | +
|
| 59 | +解析得到的依赖路径可以再在之后使用 [`experimental.renderBuiltUrl`](../guide/build.md#advanced-base-options) 更改。 |
| 60 | +
|
| 61 | +## build.polyfillModulePreload {#build-polyfillmodulepreload} |
| 62 | +
|
| 63 | +- **类型:** `boolean` |
| 64 | +- **默认:** `true` |
| 65 | +- **已废弃** 请使用 `build.modulePreload.polyfill` 替代 |
| 66 | +
|
| 67 | +是否自动注入一个 [模块预加载 polyfill](https://guybedford.com/es-module-preloading-integrity#modulepreload-polyfill)。 |
| 68 | +
|
35 | 69 | ## build.outDir {#build-outdir}
|
36 | 70 |
|
37 | 71 | - **类型:** `string`
|
@@ -111,10 +145,10 @@ Git LFS 占位符会自动排除在内联之外,因为它们不包含它们所
|
111 | 145 |
|
112 | 146 | ## build.lib {#build-lib}
|
113 | 147 |
|
114 |
| -- **类型:** `{ entry: string, name?: string, formats?: ('es' | 'cjs' | 'umd' | 'iife')[], fileName?: string | ((format: ModuleFormat) => string) }` |
| 148 | +- **类型:** `{ entry: string | string[] | { [entryAlias: string]: string }, name?: string, formats?: ('es' | 'cjs' | 'umd' | 'iife')[], fileName?: string | ((format: ModuleFormat, entryName: string) => string) }` |
115 | 149 | - **相关内容:** [库模式](/guide/build#library-mode)
|
116 | 150 |
|
117 |
| -构建为库。`entry` 是必须的因为库不能使用 HTML 作为入口。`name` 则是暴露的全局变量,在 `formats` 包含 `'umd'` 或 `'iife'` 时是必须的。默认 `formats` 是 `['es', 'umd']` 。`fileName` 是输出的包文件名,默认 `fileName` 是 `package.json` 的 `name` 选项,同时,它还可以被定义为参数为 `format` 的函数。 |
| 151 | +构建为库。`entry` 是必需的,因为库不能使用 HTML 作为入口。`name` 则是暴露的全局变量,并且在 `formats` 包含 `'umd'` 或 `'iife'` 时是必需的。默认 `formats` 是 `['es', 'umd']`,如果使用了多个配置入口,则是 `['es', 'cjs']`。`fileName` 是输出的包文件名,默认 `fileName` 是 `package.json` 的 `name` 选项,同时,它还可以被定义为参数为 `format` 和 `entryAlias` 的函数。 |
118 | 152 |
|
119 | 153 | ## build.manifest {#build-manifest}
|
120 | 154 |
|
@@ -175,6 +209,14 @@ npm add -D terser
|
175 | 209 |
|
176 | 210 | 默认情况下,若 `outDir` 在 `root` 目录下,则 Vite 会在构建时清空该目录。若 `outDir` 在根目录之外则会抛出一个警告避免意外删除掉重要的文件。可以设置该选项来关闭这个警告。该功能也可以通过命令行参数 `--emptyOutDir` 来使用。
|
177 | 211 |
|
| 212 | +## build.copyPublicDir {#build-copypublicdir} |
| 213 | +
|
| 214 | +- **实验性特性** |
| 215 | +- **类型:** `boolean` |
| 216 | +- **默认:** `true` |
| 217 | +
|
| 218 | +默认情况下,Vite 会在构建阶段将 `publicDir` 目录中的所有文件复制到 `outDir` 目录中。可以通过设置该选项为 `false` 来禁用该行为。 |
| 219 | +
|
178 | 220 | ## build.reportCompressedSize {#build-reportcompressedsize}
|
179 | 221 |
|
180 | 222 | - **类型:** `boolean`
|
|
0 commit comments