当前位置: 首页 > 知识库问答 >
问题:

vue2 - vue 2 项目 terser-webpack-plugin 去除 console失效?

陶泳
2024-08-14

vue 2 项目 terser-webpack-plugin 去除 console失效?
vue.config.js 的配置?

const pathNode = require("path");
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const TEST_BASE_URL = process.env.VUE_APP_BASE_URL;

// vue.config.js
module.exports = {
  transpileDependencies: ["vuex-module-decorators"],
  publicPath: "/", // 基本路径
  outputDir: "dist", // 设置项目打包生成的文件的存储目录,可以是静态路径也可以是相对路径。
  css: {
    loaderOptions: {
      scss: {
        prependData: `@import "~@/assets/css/style.scss";`
      }
    }
  },
  chainWebpack: config => {
    config.resolve.alias
      .set("@", pathNode.resolve(__dirname, "./src"))
      .set("@store", pathNode.resolve(__dirname, "./src/store"))
      .set("@js", pathNode.resolve(__dirname, "./src/assets/js"))
      .set("@css", pathNode.resolve(__dirname, "./src/assets/css"))
      .set("@img", pathNode.resolve(__dirname, "./src/assets/imgs"))
      .set("@c", pathNode.resolve(__dirname, "./src/components"))
      .set("@view", pathNode.resolve(__dirname, "./src/views"));
  },
  configureWebpack: config => {
    if (process.env.VUE_APP_ENV === "production") {
      return {
        devtool: "none",
        optimization: {
          minimizer: [
            new TerserPlugin({
              terserOptions: {
                compress: {
                  drop_console: true, // 移除 console 语句
                  drop_debugger: true, // 移除 debugger 语句
                  pure_funcs: ['console.log'] // 移除 console.log
                }
              }
            })
          ]
        },
        plugins: [
          new CompressionWebpackPlugin({
            algorithm: "gzip", // 使用 gzip 压缩
            test: /\.(js|css|html)$/, // 匹配要压缩的文件类型
            threshold: 10240, // 只有大于 10KB 的文件才会被压缩
            minRatio: 0.8 // 最小压缩率
          })
        ]
      };
    } else {
      return {
        devtool: false,
        optimization: {
          minimizer: [
            new TerserPlugin({
              terserOptions: {
                compress: {
                  drop_console: true, // 移除 console 语句
                  drop_debugger: true, // 移除 debugger 语句
                  pure_funcs: ['console.log'] // 移除 console.log
                }
              }
            })
          ]
        },
        plugins: [
          new CompressionWebpackPlugin({
            algorithm: "gzip", // 使用 gzip 压缩
            test: /\.(js|css|html)$/, // 匹配要压缩的文件类型
            threshold: 10240, // 只有大于 10KB 的文件才会被压缩
            minRatio: 0.8, // 最小压缩率
            filename: "[path][base].gz" // 自定义压缩文件名
          })
        ]
      };
    }
  }
};

共有5个答案

邓高韵
2024-08-14

为了加快开发速度,在开发模式下,webpack 不会最小化 js

或者可以手动设置 optimization.minimize = true https://webpack.docschina.org/configuration/optimization/#opt...

燕扬
2024-08-14

根文件调用一下 线上环境需要调试也可打开console

   webpackClearConsole() {
    if (!location.search.includes('debug') && process.env.NODE_ENV === 'production') {
      const consoles = window.console as Console;
      for (const item in consoles) {
        if (Reflect.has(consoles, item)) {
          consoles[item as keyof Console] = (() => { }) as never;
        }
      }
    }
  }
易祖鹤
2024-08-14

你的代码顶部加了判断生产环境
image.png


参考vue打包去除日志
你需要控制minimize属性为true即可

const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
    configureWebpack: {
        optimization: {
            minimize: true,
            minimizer: [
                new TerserPlugin({
                    terserOptions: {
                        ecma: undefined,
                        warnings: false,
                        parse: {},
                        compress: {
                            drop_console: true,
                            drop_debugger: true,
                            pure_funcs: ['console.log'], // 移除console
                        },
                    },
                }),
            ],
        },
    }
}
章晋鹏
2024-08-14

因为从 webpack 4 开始,会根据 mode 来执行不同的优化。
TerserPlugin 只在生产环境中生效,不在开发环境中生效。

选项 描述
development 会将 DefinePluginprocess.env.NODE_ENV 的值设置为 development,启用 NamedChunksPluginNamedModulesPlugin 优化选项
production 会将 DefinePluginprocess.env.NODE_ENV 的值设置为 production, 启用 FlagDependencyUsagePlugin , FlagIncludedChunksPlugin , ModuleConcatenationPlugin , NoEmitOnErrorsPlugin , OccurrenceOrderPlugin , SideEffectsFlagPluginTerserPlugin 优化选项
none 不使用任何默认优化选项

如果想要在线上测试环境之类的生效,可以在对应的环境变量配置文件中声明 NODE_ENV = production

Mode | webpack

盖弘毅
2024-08-14

这个在生产环境下可以正常去除console

 类似资料:
  • 为什么return没用 我改成这样是可以的 // 旧文件确认

  • vue2给项目设置publicPath: "/MY_PROJECT/",base: process.env.BASE_URL 例如访问/login时,http://localhost:8228/MY_PROJECT/login可以正常访问,http://localhost:8228/login也可以正常访问,我想解决后者没有添加上/MY_PROJECT的路径必须添加上前缀/MY_PROJECT才能

  • 公司里的vue2+webpack4项目,启动编译时间达到4分钟左右,启动完以后,改一行代码,重新编译的时间,也有达到10秒左右,我想优化一下项目,使用speed-measure-webpack-plugin这个插件,测速,启动时间暂时不管,我改了东西,重新编译,总感觉是不是有东西重复了,麻烦各位大神帮忙看看 有大神如果想看看是什么奇葩项目,启动时间这么久,也可以帮我一起看看,头大

  • 关于vue-cli4使用terser-webpack-plugin时, exclude不生效 我的目的就是想让utils.js文件下 console.* 都能打印 其余文件的console移除 vue-cli4本自带terser,使用过exclude,发现打印出来没有exclude于是安装了插件 接着自行升级了cli和安装terser-webpack-plugin "@vue/cli-servic

  • 请问有大佬知道vue2项目打包的apk的导出功能为什么失效了吗?网页,h5的应该还是可以下载的。我又不想导出功能和后端有交互,想纯前端下载,网页的下载写法好像打包到apk后失效了。在app中加入vconsole,手机中也没有任何的error或info等信息打印出来…… 问了一些大佬,认为是内置浏览器不支持一些写法,可能是不兼容…… 还有说要用webview内嵌打包后的dist文件夹的,还有是用vc