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 能更快的完成对多个文件的压缩工作。

  • 相关阅读:
    ABP-AsyncLocal的使用
    ABP-多个DbContext实现事物更新
    ABP取其精华
    VS2019和net core 3.0(整理不全,但是孰能生巧)
    consul部署多台Docker集群
    Arcgis runtime sdk .net 二次开发
    C# 依赖注入 & MEF
    自动构建环境搭建
    C# 调用C/C++动态链接库,结构体中的char*类型
    C# 调用C++DLL 类型转换
  • 原文地址:https://www.cnblogs.com/chucklu/p/14177336.html
Copyright © 2011-2022 走看看