You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue CLI 5执行vue build时Terser Plugin未运行

问题现象

生产环境构建时配置的Terser Plugin未正常运行,输出代码未经过压缩、混淆,将devtool改为hidden-source-map后问题仍存在。
当前环境依赖版本:

  • terser-webpack-plugin@^5.3.3
  • @vue/cli@5.0.7
    配置中isProd变量可正确判定生产环境(值为true),原有配置如下:
const TerserPlugin = require('terser-webpack-plugin');
const isProd = process.env.NODE_ENV === 'production';

module.exports = {
    publicPath: '/',
    devServer: {
        host: 'staging-beta.myDomain.com',
        port: 9000,
        allowedHosts: 'all',
    },
    transpileDependencies: ['vuetify'],
    chainWebpack: (config) => {
        // reducted code
    },
    configureWebpack: {
        devtool: 'source-map',
        optimization: {
            minimize: isProd,
            minimizer: isProd
                ? [
                      new TerserPlugin({
                          minify: TerserPlugin.uglifyJsMinify,
                          terserOptions: {
                              compress: {
                                  drop_console: true,
                              },
                              output: {
                                  comments: false,
                              },
                          },
                      }),
                  ]
                : [],
        },
    },
};
故障原因
  1. 配置中指定minify: TerserPlugin.uglifyJsMinify时,terser-webpack-plugin 5.x版本不会自动安装uglify-js依赖,缺失依赖时压缩流程会静默跳过,无明确报错。且uglify-js本身不支持ES6+语法,项目中引入的vuetify等依赖输出的ES6+代码会直接导致压缩失败。
  2. 直接以对象形式在configureWebpack中覆写optimization.minimizer数组,会和Vue CLI 5内置的webpack优化配置产生合并冲突,自定义的插件实例无法被正常加入构建执行流程。
  3. 新版terser的输出配置字段为format,原有配置写为output属于无效配置,即使插件运行也无法达到移除注释的预期效果。
修复方案
  1. 优先使用terser作为压缩工具(terser-webpack-plugin默认内置,无需额外安装,原生支持ES6+语法,适配Vue项目绝大多数场景),不需要手动引入uglify-js。
  2. 不要重新实例化TerserPlugin覆盖minimizer数组,通过chainWebpack直接修改Vue CLI内置的TerserPlugin配置,避免配置合并冲突,修正后的配置参考:
const isProd = process.env.NODE_ENV === 'production';

module.exports = {
    publicPath: '/',
    devServer: {
        host: 'staging-beta.myDomain.com',
        port: 9000,
        allowedHosts: 'all',
    },
    transpileDependencies: ['vuetify'],
    chainWebpack: (config) => {
        // 原有其他chainWebpack逻辑保留
        if (isProd) {
            config.optimization.minimizer('terser').tap((args) => {
                args[0].terserOptions = {
                    compress: {
                        drop_console: true,
                    },
                    format: {
                        comments: false,
                    }
                };
                return args;
            });
        }
    },
    configureWebpack: (config) => {
        config.devtool = isProd ? 'source-map' : 'eval-cheap-module-source-map';
        config.optimization.minimize = isProd;
    },
};
  1. 若因特殊需求必须使用uglify-js压缩,需先执行npm install uglify-js --save-dev安装依赖,同时将所有包含ES6+语法的依赖(包括vuetify)加入transpileDependencies做ES5转译,再在上述chainWebpack的terser配置中增加args[0].minify = TerserPlugin.uglifyJsMinify;即可。
    注意:uglify-js对ES6+语法无兼容支持,除非项目所有代码均为ES5,否则不推荐使用

内容的提问来源于stack exchange,提问作者Constantinos N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:48:17