构建生产版本

当需要将应用部署到生产环境时,只需运行 vite build 命令。默认情况下,它使用 <root>/index.html 作为构建入口点,并生成一个适合通过静态部署的应用包。查看 部署静态站点 获取常见服务的部署指引。

浏览器兼容性

生产版本假设已实现现代 JavaScript 语法。默认情况下,所有代码构建都会以 支持原生 ESM script 标签的浏览器 为目标。

  • Chrome >=61
  • Firefox >=60
  • Safari >=11
  • Edge >=16

一个轻量级的 对动态导入的 polyfill 也会同时自动注入。

你也可以通过 build.target 配置项 指定构建目标,最低支持 es2015

请注意,默认情况下 Vite 只处理语法转译,并 不默认包含任何 polyfill。你可以前往 Polyfill.io 查看,这是一个基于用户浏览器 User-Agent 字符串自动生成 polyfill 包的服务。

传统浏览器可以通过插件 @vitejs/plugin-legacy 来支持,它将自动生成传统版本的 chunk 和其相应 ES 语言特性方面的 polyfill。兼容版的 chunk 只会在不支持原生 ESM 的浏览器中有按需加载。

公共基础路径

如果你正在嵌套的公共路径下部署项目,可以简单指定一个 build.base 配置项 然后所有资源的路径都将据此重写。这个选项也可以通过命令行参数指定,例如 vite build --base=/my/public/path/

由 JS 导入的资源路径,CSS 中的 url() 引用,和 .html 文件中的资源引用在构建过程中都会自动调整以适配此选项。

例外情况是需要动态连接 url。在这种情况下,你可以使用全局注入的 import.meta.env.BASE_URL 变量,它将是 公共基础路径。注意这个变量在构建中是被静态替换的所以它必须是原本的样子(例如 import.meta.env['BASE_URL'] 是无效的)

自定义构建

构建过程可以通过多种 构建配置选项 来自定义。特别地,你可以通过 build.rollupOptions 直接调整底层的 Rollup 选项

  1. // vite.config.js
  2. module.exports = {
  3. build: {
  4. rollupOptions: {
  5. // https://rollupjs.org/guide/en/#big-list-of-options
  6. }
  7. }
  8. }

例如,你可以使用仅在构建期间应用的插件来指定多个 Rollup 输出。

文件变化时重新编译

你可以使用 vite build --watch 来启用 rollup 的监听器。或者,你可以直接通过 build.watch 调整底层的 WatcherOptions 选项:

  1. // vite.config.js
  2. module.exports = {
  3. build: {
  4. watch: {
  5. // https://rollupjs.org/guide/en/#watch-options
  6. }
  7. }
  8. }

多页面应用模式

假设你有下面这样的项目文件结构

  1. ├── package.json
  2. ├── vite.config.js
  3. ├── index.html
  4. ├── main.js
  5. └── nested
  6. ├── index.html
  7. └── nested.js

在开发中,简单地导航或链接到 /nested/ - 将会按预期工作,就如同一个正常的静态文件服务器。

在构建中,你要做的只有指定多个 .html 文件作为入口点:

  1. // vite.config.js
  2. const { resolve } = require('path')
  3. module.exports = {
  4. build: {
  5. rollupOptions: {
  6. input: {
  7. main: resolve(__dirname, 'index.html'),
  8. nested: resolve(__dirname, 'nested/index.html')
  9. }
  10. }
  11. }
  12. }

如果你指定了另一个根目录,请记住,在解析输入路径时,__dirname 的值将仍然是 vite.config.js 文件所在的目录。因此,你需要把 root 的路径添加到 resolve 的参数中。

库模式

当你开发面向浏览器的库时,你可能会将大部分时间花在该库的测试/演示页面上。使用 Vite,你可以使用 index.html 来获得如丝般顺滑的开发体验。

当需要构建你的库用于发布时,请使用 build.lib 配置项,请确保将你不想打包进你库中的依赖进行外部化,例如 vuereact

  1. // vite.config.js
  2. const path = require('path')
  3. module.exports = {
  4. build: {
  5. lib: {
  6. entry: path.resolve(__dirname, 'lib/main.js'),
  7. name: 'MyLib'
  8. },
  9. rollupOptions: {
  10. // 请确保外部化那些你的库中不需要的依赖
  11. external: ['vue'],
  12. output: {
  13. // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
  14. globals: {
  15. vue: 'Vue'
  16. }
  17. }
  18. }
  19. }
  20. }

运行 vite build 配合如上配置将会使用一套 Rollup 预设,为发行该库提供两种构建格式:esumd(在 build.lib 中配置的):

  1. $ vite build
  2. building for production...
  3. [write] my-lib.es.js 0.08kb, brotli: 0.07kb
  4. [write] my-lib.umd.js 0.30kb, brotli: 0.16kb

推荐你的库中 package.json 的采用如下格式:

  1. {
  2. "name": "my-lib",
  3. "files": ["dist"],
  4. "main": "./dist/my-lib.umd.js",
  5. "module": "./dist/my-lib.es.js",
  6. "exports": {
  7. ".": {
  8. "import": "./dist/my-lib.es.js",
  9. "require": "./dist/my-lib.umd.js"
  10. }
  11. }
  12. }