分分钟清除项目中无用的console.log代码

news/2024/7/10 2:07:02 标签: js, vue, web, eclipse, babel
js_content">

前言

说起console.log调试,不用多说,那是非常的好用,开发中帮助我们解决了不少Bug。我们经常能在开发环境中看见这一坨一坨的console调试。但是生产环境是绝不对不允许出现console信息代码的。你还在手动一个一个删除吗,那得多累啊!

下面我们来看一下这几种方式清除生产环境console无用代码。

基本操作

Webpack配置

uglifyjs-webpack-plugin

uglifyjs-webpack-plugin

我们可以看一下该插件介绍,该插件是用于减少我们代码js代码体积。并且如果安装运行该插件的话,node版本是在v6.9.0+Webpack版本v4.0.0+

官网地址看这里:uglifyjs-webpack-plugin

安装

npm i uglifyjs-webpack-plugin

使用

webpack.config.js文件下进行如下配置。

const UglifyJsPlugin = require( uglifyjs-webpack-plugin )
module.exports = {
 // 省略...
    mode: "production",
    optimization: {
        minimizer: [
          new UglifyJsPlugin({
            uglifyOptions: {
              // 删除注释
              output:{
                comments: false
              },
              compress: {
                drop_console: true, // 删除所有调式带有console的
                drop_debugger: true,
                pure_funcs: [ console.log ] // 删除console.log
              }
            }
          })
        ]
      } 
}

配置完上面代码,重启即可看到效果。注意:代码只会在production(生产环境)环境下有效,看上面我们的配置mode: production,就是生产环境。来讲解一下上面这俩个属性drop_consolepure_funcs的区别,前者则是删除所有带console的前缀的调试方法,如:console.logconsole.tableconsole.dir只要带有console前缀则全部删除。而后者则是配置,就是数组的值是什么它才会删除什么,比如pure_funcs:[console.log, console.dir]那么只会删除这两项,则不会删除代码中的console.table代码。

以上代码放到生产环境下,console调试代码即可清除,但是还有一个问题需要注意,就是该插件只支持ES5语法,如果你的代码中涉及到ES6语法则会报错。

terser-webpack-plugin

terser-webpack-plugin

该插件跟上面uglifyjs-webpack-plugin一样,都是用于减少我们代码js代码体积。

看上面描述:如果你的Webpack版本大于5+,则不需要安装此terser-webpack-plugin插件,会自带terser-webpack-plugin。但你的Webpack版本还是4,则你需要安装terser-webpack-plugin4的版本

安装

npm i terser-webpack-plugin@4

使用

const TerserWebpackPlugin = require("terser-webpack-plugin");

module.exports = {
    // 省略...
    mode: "production",
    optimization: {
     minimizer: [
           new TerserWebpackPlugin({
                terserOptions: {
                  compress: {
                    warnings: true,
                    drop_console: true,
                    drop_debugger: true,
                    pure_funcs: [ console.log , "console.table"] // 删除console
                  }
                }
            });
        ]
    }
}

该插件功能与上面一样,属性用法也一样,唯一该插件可支持ES6语法。都是在生产环境代码生效。

Vue-cli配置

这是在Vue-cli项目中推荐使用的清除console插件。更多介绍看这里 babel-plugin-transform-remove-console

安装

npm i babel-plugin-transform-remove-console --save-dev

使用

在项目根目录babel.config.js文件下配置。该插件不区分生产环境或者开发环境,只要你配置都能生效。

module.exports = {
 plugins: [
  "transform-remove-console"
 ]
}

// 生产环境如下配置

const prodPlugins = []
if (process.env.NODE_ENV ===  production ) {
 prodPlugins.push( transform-remove-console )
}
module.exports = {
 plugins: [
  ...prodPlugins
 ]
}

简单粗暴删除

接下来这个可是一个骚操作,瞪大眼睛看好了,哈哈哈。直接重写console.log的方法。

console.log = function () {};

灵活运用VScode编辑器

微信截图_20210805001715.png

使用

直接全局搜索本项目里console.log正则匹配,然后全部替换为空即可。

console.log(.*?)

手写Loader删除console

我们来写一个简易版的清除console插件。

新建一个js文件,我这里名为clearConsole.js,其实这里也是用正则去匹配然后替换为空。如果不懂loader则可看我这篇文章手写一个Sass-loader。

clearConsole.js

const reg = /(console.log()(.*)())/g;
module.exports = function(source) {
    source = source.replace(reg, "")
    return source;
}

Vue.config.js配置

module.exports = {
    // 省略...
    configureWebpack: {
        module: {
            rules: [
                {
                    test: /.vue$/,
                    exclude: /node_modules/,
                    loader: path.resolve(__dirname, "./clearConsole.js")
                },
                {
                    test: /.js$/,
                    exclude: /node_modules/,
                    loader: path.resolve(__dirname, "./clearConsole.js")
                }
            ],
        }
    },
}

配置如上代码就可以啦~,清除js文件和vue文件里的console.logexclude代表不去node_module目录下查找。


http://www.niftyadmin.cn/n/1251172.html

相关文章

docker上安装centos镜像

1、查找镜像源 docker search centos 2、下载镜像 docker pull centos 3、查看已下载的镜像 docker images 4、启动镜像 docker run -itd -p 5000:22 --name centos7 docker.io/centos /bin/bash -i:表示以“交互模式”运行容器 -t:表示容器启…

常见网站攻击技术,一篇打包全部带走!

大家好,今天给大家介绍一下,Web安全领域常见的一些安全问题。1、SQL 注入SQL注入攻击的核心在于让Web服务器执行攻击者期望的SQL语句,以便得到数据库中的感兴趣的数据或对数据库进行读取、修改、删除、插入等操作,达到其邪恶的目的…

​一顿操作,我把 Table 组件性能提升了十倍

背景Table 表格组件在 Web 开发中的应用随处可见,不过当表格数据量大后,伴随而来的是性能问题:渲染的 DOM 太多,渲染和交互都会有一定程度的卡顿。通常,我们有两种优化表格的方式:一种是分页,另…

Docker实现CentOS容器SSH远程登录(使用Dockerrfile)

这里根据Dockerfile方式构建一个CentOS的可远程SSH的镜像。 Dockerfile文件 在目录下新建Dockerfile文件。注意:目录可以自行设定,但目录下除了Dockerfile文件外建议不要放置别的文件和目录。 vim Dockerfile # 生成的新镜像以centos镜像为基础 FROM…

input输入框常用限制

最简单的html代码实现输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 <input typetext onkeyup"valuevalue.replace(/^(0)|[^\d]/g,)"> 校验登录名&#xff1a;只能输入5-20个以字母开头、可带数…

优秀文章合集推荐,收藏就是学会

话不多说&#xff0c;这一次花了几小时精心为大家挑选了30余篇好文&#xff0c;供大家阅读学习&#xff0c;提升自己的技术视野以及扩展自己的知识储备。本文阅读技巧&#xff0c;先粗看标题&#xff0c;感兴趣可以都关注一波&#xff0c;一起共同进步。前端印象简介&#xff1…

看完尤雨溪338条知乎回答后,我突然找到了前进的方向

1、创造影响力的机会总是存在&#xff0c;但受一定的时代进程的影响。这里并不是说能不能成完全靠运气&#xff1a;作为个人想要最大化创造影响力的机会&#xff0c;最重要的是两点&#xff1a;会发现问题&#xff0c;并且判断出什么问题值得解决。具备高质量解决某个领域问题的…

为什么说大多数 JavaScript 工程师写的错误处理都有问题

程序是从上到下顺序执行的&#xff0c;同时可以通过一些控制语句来改变执行的路线&#xff0c;受控制语句影响下&#xff0c;程序最终的执行路线就是控制流。js 里面的控制语句有 if、for、while、try catch 等&#xff0c;它们都会改变程序的走向。程序是操作数据的&#xff0…