最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue项目Webpack打包去掉console和debugger

    正文概述 掘金(人邮快递)   2021-06-09   1720

    这是我参与更文挑战的第2天,活动详情查看: 更文挑战

    耐心看下去,后面有采坑

    一、前言

    本文一共会使用两种插件进行打包的实例讲解。一个为 uglifyjs-webpack-plugin(比较久没有维护了), 另一个为 terser-webpack-plugin。

    二、安装

    1.安装插件 uglifyjs-webpack-plugin

    yarn add -D uglifyjs-webpack-plugin  或  npm install uglifyjs-webpack-plugin
    

    至于为什么要加 -D 请看下面两篇文章的解释。

    blog.csdn.net/wangguoyu19…

    www.cnblogs.com/hukuangjie/…

     (1)在vue.config.js 文件中进行配置

         ① 在文件头部引入
    //打包配置自动忽略console.log等
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
    
         ② 配置这段代码
    //打包环境去掉console.log等
    new UglifyJsPlugin({
      uglifyOptions: {
         compress: {
           warnings: false,
           drop_console: true,  //注释console
           drop_debugger: true, //注释debugger
           pure_funcs: ['console.log'], //移除console.log
         },
       },
    }),
    

    为了避免不明确,复制完整代码段:

    //打包配置自动忽略console.log等
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
     
    module.exports = {
    	publicPath: './',
    	devServer: {
    		......
    	},
    	css:{
    		......
    	},
    	// eslint-disable-next-line no-unused-vars
    	configureWebpack: config => {
        if (process.env.NODE_ENV === 'production') {
          return {
            plugins: [
              //打包环境去掉console.log
              new UglifyJsPlugin({
                uglifyOptions: {
                  compress: {
                    warnings: false,
                    drop_console: true,  //注释console
                    drop_debugger: true, //注释debugger
                    pure_funcs: ['console.log'], //移除console.log
                  },
                },
              }),
            ],
          }
        }
     
      }
    }
    

    问题得到解决。

    但是,就在这配置不久之后,我在打包的时候就发现报错了....

    Vue项目Webpack打包去掉console和debugger 然后查阅资料发现,是因为最新版的 uglifyjs-webpack-plugin 插件已经不支持es6语法,github官方有说明:github.com/webpack-con…

    Vue项目Webpack打包去掉console和debugger 里边说到,使用 terser-webpack-plugin 这个插件,暂时先放过,马上就要提到了。

    那么回到上题,这个问题没法解决了了吗?

    当然是可以的,将 uglifyjs-webpack-plugin 的版本降低到 V1.1.1版本就可以正常使用了。

     yarn add -D uglifyjs-webpack-plugin@1.1.1
    

    然后这个时候我又有了新的疑问,这怎么感觉哪里有点问题,哦,我的脚手架里的 babel 不是自动 es6 转es5 的吗?

    我就不死心的再次尝试了一下,发现只要把里边的移除警告去掉,他就好使了.......

    // warnings: false,  //移除警告
     drop_console: true,  //注释console
     drop_debugger: true, //注释debugger
     pure_funcs: ['console.log'], //移除console.log
    

    我将这里的移除警告注释掉了,再次打包,好使了....

    太难了,暂时不知道什么原因,大家如有解决办法,可以给个解答,如果没有,就暂时这么用吧。

    2.安装插件terser-webpack-plugin

    yarn add -D terser-webpack-plugin  或  npm install terser-webpack-plugin
    

     (1)在vue.config.js 文件中进行配置

         ① 在文件头部引入
    const TerserPlugin = require("terser-webpack-plugin");
    
         ② 配置这段代码
    new TerserPlugin({
          terserOptions: {
          ecma: undefined,
          warnings: false,
          parse: {},
          compress: {
            drop_console: true,
            drop_debugger: false,
            pure_funcs: ['console.log'], // 移除console
          },
        },
    }),
    

    为了避免不明确,复制完整代码段:

    //打包配置自动忽略console.log等
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
     
    module.exports = {
    	publicPath: './',
    	devServer: {
    		......
    	},
    	css:{
    		......
    	},
    	// eslint-disable-next-line no-unused-vars
    	configureWebpack: config => {
        if (process.env.NODE_ENV === 'production') {
              return {
                plugins: [
                  //打包环境去掉console.log
                 new TerserPlugin({
                  terserOptions: {
                  ecma: undefined,
                  warnings: false,
                  parse: {},
                  compress: {
                    drop_console: true,
                    drop_debugger: false,
                    pure_funcs: ['console.log'], // 移除console
                  },
                },
             }),
           ],
         }
       }
     }
    }
    

    但是这里如果你使用了最新版的 terser-webpack-plugin ,则会产生一个 ‘JavaScript’ 错误。

    Vue项目Webpack打包去掉console和debugger 所以这里使用版本 "terser-webpack-plugin": "^4.2.3"

    yarn add -D terser-webpack-plugin@4.2.3
    

    在webpack4 里边确实需要 配置这个 terser-webpack-plugin 插件,在 webpack5 中已经默认配置好了(具体可以去看文档),所以,期待脚手架配置 webpack5 上线。

    但是,问题又来了

    我使用这个版本去做打包的时候,确实可以打包成功,但是打包的时候超级卡,超级慢,无奈,我换回了上一个插件,毕竟我的需求就是想要干掉 console 。

    当然了,锲而不舍,我最后还是找到了解决办法来堵坑:

    上面提到了用最新版的 terser-webpack-plugin 会报错,于是我按照网上资料查找使用了 4.2.3 版本,但是打包很慢,然后后来经过查找,发现我可能没有开多进程,开了之后一路顺风。

    new TerserPlugin({
        cache: true,
    	sourceMap: false,
    	// 多进程
    	parallel: true,
    	terserOptions: {
    	    ecma: undefined,
    	    warnings: false,
    		parse: {},
    		compress: {
    			drop_console: true,
    			drop_debugger: false,
    			pure_funcs: ['console.log'], // 移除console
    		},
    	},
    }),
    

    好了,此次的分享就到此结束了,欢迎大家的指正。

    起源地下载网 » Vue项目Webpack打包去掉console和debugger

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元