跳转到内容

编译时标志

提示

编译时标志仅在使用 Vue 的 esm-bundler 构建版本时适用(即 vue/dist/vue.esm-bundler.js)。

在使用 Vue 进行构建时,可以配置一系列编译时标志以启用或禁用某些功能。使用编译时标志的优点是,通过这种方式禁用的功能可以通过摇树优化从最终包中删除。

即使没有明确配置这些标志,Vue 仍然可以工作。然而,建议始终配置它们,以便在可能的情况下正确删除相关功能。

有关如何根据您的构建工具配置它们,请参阅配置指南

__VUE_OPTIONS_API__

  • 默认值: true

    启用/禁用选项 API 支持。禁用此选项将导致包体积更小,但可能会影响与依赖选项 API 的第三方库的兼容性。

__VUE_PROD_DEVTOOLS__

  • 默认值: false

    启用/禁用生产构建中的 devtools 支持。这将导致包中包含更多代码,因此建议仅用于调试目的。

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__

  • 默认值: false

    启用/禁用生产构建中水合不匹配的详细警告。这将导致捆绑包中包含更多代码,因此建议仅用于调试目的。

  • 仅在3.4+版本中可用

配置指南

Vite

@vitejs/plugin-vue 自动为这些标志提供默认值。要更改默认值,请使用 Vite 的 define 配置选项

js
// vite.config.js
import { defineConfig } from 'vite'

export default defineConfig({
  define: {
    // enable hydration mismatch details in production build
    __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
  }
})

vue-cli

@vue/cli-service 自动为这些标志提供一些默认值。要配置/更改值

js
// vue.config.js
module.exports = {
  chainWebpack: (config) => {
    config.plugin('define').tap((definitions) => {
      Object.assign(definitions[0], {
        __VUE_OPTIONS_API__: 'true',
        __VUE_PROD_DEVTOOLS__: 'false',
        __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
      })
      return definitions
    })
  }
}

webpack

标志应使用 webpack 的 DefinePlugin 定义

js
// webpack.config.js
module.exports = {
  // ...
  plugins: [
    new webpack.DefinePlugin({
      __VUE_OPTIONS_API__: 'true',
      __VUE_PROD_DEVTOOLS__: 'false',
      __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
    })
  ]
}

Rollup

标志应使用 @rollup/plugin-replace 定义

js
// rollup.config.js
import replace from '@rollup/plugin-replace'

export default {
  plugins: [
    replace({
      __VUE_OPTIONS_API__: 'true',
      __VUE_PROD_DEVTOOLS__: 'false',
      __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
    })
  ]
}
编译时标志已加载