编译时标志
提示
编译时标志仅在使用 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'
})
]
}