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

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到