vue-cli中terser-webpack-plugin应用实战

2023-10-20 16:58

本文主要是介绍vue-cli中terser-webpack-plugin应用实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说在前面

先来说一下这个插件的作用,引用官网的一句话,该插件使用 [terser](https://github.com/terser/terser) 来压缩 JavaScript。

我们项目主要用来去除生产环境中的console以及debugger等信息。

餐前小菜

值得注意的是,vue-cli在开发环境中TerserWebpackPlugin是不会生效的,所以在引入该插件时,即使我们希望只在生产环境中生效,不需要判断当前的环境。

在这里插入图片描述

应用初尝试

vue-cli对于TerserWebpackPlugin是有封装的,所以直接按照官网介绍的方式引入是有问题的,当然,问题不是说说而已,下面给大家对比一下不同的引入方式对于打包产生的损耗。

// vue.config.js
const TerserPlugin = require('terser-webpack-plugin')
... // other code
configureWebpack: {optimization: {minimizer: [new TerserPlugin({parallel: 4,terserOptions: {compress: {warnings: true,drop_debugger: true, // 删除debuggerdrop_console: true  // 删除console}}})],}
}

此时运行npm run build命令,可以发现打包时间是:

在这里插入图片描述

究其原因,大家此时可以执行一下vue inspect > output.js命令,查看一下打包的配置文件,搜索关键字minimizer,可以发现他有两个options,我们有理由相信,这种情况下去打包,这两个插件会分别处理一遍我们的工程,为什么?

本身vue-cli会帮我们引入TerserWebpackPlugin,特定的webpack版本也会自动引入该插件,在vue.config.js中引入的TerserPlugin经过定位就是webpack引入的,所以在webpack配置中,一共new()了两次,自然也就会处理两次。

优化尝试

下面我们尝试去覆盖已有的配置,添加删除console以及debugger的代码:

// vue.config.js
chainWebpack (config) {config.optimization.minimizer('terser').tap((args) => {args[0].parallel = 4args[0].terserOptions = {compress: {warnings: true,drop_console: true,drop_debugger: true}}return args})
}

此时去查看打包配置的文件,搜索minimizer,可以发现就只有一个options了,说明我们已经成功完成了合并,但是上面的写法好像把terserOptions属性完全覆盖了,我们看一下当前的打包时间:

在这里插入图片描述

不错,快了40秒左右的时间。

最佳体验

其实vue-cli给出的配置,肯定是经过优化调整的,所以不是特殊情况,就不要覆盖原有配置了,所以改成下面这种写法:

// vue.config.js
chainWebpack (config) {config.optimization.minimizer('terser').tap((args) => {args[0].parallel = 4args[0].terserOptions.compress.warnings = trueargs[0].terserOptions.compress.drop_debugger = trueargs[0].terserOptions.compress.drop_console = truereturn args})
}

现在来看看打包的时间:

在这里插入图片描述

速度又增加了40秒左右。

说到最后

以上。

这篇关于vue-cli中terser-webpack-plugin应用实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248425

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA