Bundler 构建功能标志
有关 vuejs.org 的详细参考
esm-bundler
Vue 的构建公开了可以在编译时覆盖的全局特性标志:
-
__VUE_OPTIONS_API__
- 违约:
true
- 启用/禁用选项 API 支持
- 违约:
-
__VUE_PROD_DEVTOOLS__
- 违约:
false
- 在生产环境中启用/禁用 devtools 支持
- 违约:
-
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__
- 违约:
false
- 启用/禁用生产中水合作用不匹配的详细警告
- 违约:
该版本无需配置这些标志即可工作,但强烈建议正确配置它们,以便在最终捆绑包中获得适当的树摇动。
core/packages/vue 在 main ·vuejs/核心 (github.com)
可以通过webpack配置,去掉警告
DefinePlugin是Webpack的一个插件,它允许创建一个在编译时可以配置的全局常量。这对于开发模式和生产模式的构建非常有用,因为它们可能允许不同的行为。例如,如果在开发构建中需要执行日志记录,而在发布构建中不需要,则可以使用DefinePlugin中的全局常量来决定是否记录日志。
DefinePlugin中的每个键值都可以是一个标识符,或者通过.
作为多个标识符。如果值是一个字符串,它会被当作一个代码片段来使用;如果值不是字符串,它会被转化为字符串(包括函数)。如果值是一个对象,则对象的所有key都会以同样的方式定义。此外,如果在一个key前面加了typeof
,它会被定义为typeof
调用。这些值会被内联进那些允许传一个代码压缩参数的代码中,从而减少冗余的条件判断。
通常,在定义环境变量时,有两种常见的用法:使用'production'
或者JSON.stringify('production')
。这样,DefinePlugin就能在编译阶段根据NODE_ENV
自动配置环境变量,提升前端开发效率。
const { resolve } = require('path')
//针对node环境排除包,web环境不需要
const webpackNodeExternals = require('webpack-node-externals')
const { VueLoaderPlugin } = require('vue-loader/dist/index')
//解决浏览器警告
const { DefinePlugin } = require('webpack')
module.exports = {target: 'node', //打包对象,打包时就不会打包fs path...mode: "development",entry: './src/server/index.js',output: {path: resolve(__dirname, '../build/server'),filename: 'server_bundle.js'},module: {rules: [{test: /\.js$/,loader: 'babel-loader',options: {presets: ["@babel/preset-env"]}},{test: /\.vue$/,loader: 'vue-loader',}]},externals: [webpackNodeExternals() //排除node_modules],resolve: {extensions: ['.js', '.json', '.was,', '.vue', '.jsx']},plugins: [new VueLoaderPlugin(),new DefinePlugin({__VUE_OPTIONS_API__: false,__VUE_PROD_DEVTOOLS__: false,__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false})]
}