构建生产版本

当需要将应用部署到生产环境时,只需运行 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 选项

// vite.config.js
module.exports = {
  build: {
    rollupOptions: {
      // https://rollupjs.org/guide/en/#big-list-of-options
    }
  }
}

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

文件变化时重新编译

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

// vite.config.js
module.exports = {
  build: {
    watch: {
      // https://rollupjs.org/guide/en/#watch-options
    }
  }
}

多页面应用模式

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

├── package.json
├── vite.config.js
├── index.html
├── main.js
└── nested
    ├── index.html
    └── nested.js

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

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

// vite.config.js
const { resolve } = require('path')

module.exports = {
  build: {
    rollupOptions: {
      input: {
        main: resolve(__dirname, 'index.html'),
        nested: resolve(__dirname, 'nested/index.html')
      }
    }
  }
}

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

库模式

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

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

// vite.config.js
const path = require('path')

module.exports = {
  build: {
    lib: {
      entry: path.resolve(__dirname, 'lib/main.js'),
      name: 'MyLib'
    },
    rollupOptions: {
      // 请确保外部化那些你的库中不需要的依赖
      external: ['vue'],
      output: {
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue'
        }
      }
    }
  }
}

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

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

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

{
  "name": "my-lib",
  "files": ["dist"],
  "main": "./dist/my-lib.umd.js",
  "module": "./dist/my-lib.es.js",
  "exports": {
    ".": {
      "import": "./dist/my-lib.es.js",
      "require": "./dist/my-lib.umd.js"
    }
  }
}