zoukankan      html  css  js  c++  java
  • Remove console.logs with Webpack & Uglify

    Remove console.logs with Webpack & Uglify

    回答1

    With UglifyJsPlugin we can handle comments, warnings, console logs but it will not be a good idea to remove all these in development mode. First check whether you are running webpack for prod env or dev env, if it is prod env then you can remove all these, like this:

    var debug = process.env.NODE_ENV !== "production";
    
    plugins: !debug ? [
       new webpack.optimize.UglifyJsPlugin({
    
         // Eliminate comments
            comments: false,
    
        // Compression specific options
           compress: {
             // remove warnings
                warnings: false,
    
             // Drop console statements
                drop_console: true
           },
        })
    ]
    : []
    

    Reference: https://github.com/mishoo/UglifyJS2#compressor-options

    UPDATE 2019 Need to use terser plugin now for ES6 support in webpack v4 https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions

    webpack.config.js

    module.exports = {
      optimization: {
        minimizer: [
          new TerserPlugin({
            sourceMap: true, // Must be set to true if using source-maps in production
            terserOptions: {
              compress: {
                drop_console: true,
              },
            },
          }),
        ],
      },
    };
    
    回答2

    Try drop_console:

    plugins: [
        new Webpack.optimize.UglifyJsPlugin({
          compress: {
            drop_console: true,
          }
        }
    ]
    

    Update: For webpack v4 it has changed a little:

    const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
    
    ...
    
    optimization: {
      minimizer: [
        new UglifyJSPlugin({
          uglifyOptions: {
            compress: {
              drop_console: true,
            }
          }
        })
      ]
    }
    

    I personally think console logs (especially console.error) are very useful on prod and think it's a good idea to keep them. If you really want to drop specific console functions such as just console.log you should use pure_funcs option e.g. pure_funcs: ['console.log'] and this will drop console.log since pure functions do not produce side effects then Uglify can discard ones not assigned to anything.

    optimization: {
      minimizer: [
        new UglifyJSPlugin({
          uglifyOptions: {
            compress: {
              // Drop only console.logs but leave others
              pure_funcs: ['console.log'],
            },
            mangle: {
              // Note: I'm not certain this is needed.
              reserved: ['console.log']
            }
          }
        })
      ]
    }
    

    For TerserJS (Uglify is deprecated and does not support new JS features you should NOT use it)

    optimization: {
      minimizer: [
        new TerserPlugin({
          terserOptions: {
            compress: {
                drop_console: true
            }
          }
        })
      ]
    }
    

    As discussed you can also use pure_funcs alternatively.

    webpack 系列四:优化包体积

    用户通过浏览器访问网页(JS、CSS资源),当文件体积越大时,网页的加载时间就越长,使用的流量就越大,用户的体验就越糟糕,所以我们需要对代码进行压缩。

    目前比较成熟的压缩工具有两种:

    • UglifyJsPlugin:通过封装 UglifyJS 实现压缩
    • ParallelUglifyPlugin:多进程并行处理压缩

    他们都会分析 JavaScript 代码语法树,理解代码含义,从而能做到诸如去掉无效代码、去掉日志输出代码、缩短变量名等优化,但相对于 UglifyJsPlugin 是单线程, ParallelUglifyPlugin 插件实现了多线程压缩,ParallelUglifyPlugin 会开启多个子进程,把对多个文件的压缩工作分配给多个子进程去完成,每个子进程其实还是通过 UglifyJS 去压缩代码,但是变成了并行执行。 所以 ParallelUglifyPlugin 能更快的完成对多个文件的压缩工作。

  • 相关阅读:
    成功的两大法宝:自我管理与积累人脉
    CEO十五条法则 (是基于对CEO更加的关怀)
    百度李彦宏教你创业七大招!非常实用
    商业领袖摘下"帽子"才能炼成极致
    Alter index coalesce VS shrink space
    sort_area_size参数的一些表现
    Difference between parameter COMPATIBLE and OPTIMIZER_FEATURES_ENABLE
    Oracle常用的几个父栓
    Know more about RAC GES STATISTICS
    ORA07445 [SIGBUS] [Object specific hardware error]错误一例
  • 原文地址:https://www.cnblogs.com/chucklu/p/14177336.html
Copyright © 2011-2022 走看看