Webpack 5 混淆插件terser-webpack-plugin生命周期作用时机和使用注意事项

参考案例代码

海南酷森科技有限公司/webpack-simple-demo

Terser(简要的/简短的) 混淆依据

  1. 混淆是发生在代码已经 bundle 之后的事情

  2. 变量或者函数在被引用或赋值时才能被混淆

  3. 孤立的函数或者变量可能会被移除,但不会被混淆,要通过显式地引用

如果被赋值的变量没有被使用,会被移除,上图来看

打包后的代码,url 被干掉了

webpack 的 externals 配置(先于 terser)

  1. 该参数的意义,即保留现有的 import $ from 'jquery' 引用方式,又明确告知,这个 jquery 不需要打包到最终代码去,例如 import Vue from "vue",也即 Vue 这个变量目前可以作为模块方式被所有模块使用,但是这个 import Vue from "vue" 提取方式是从全局 cdn 链接获得,这样可以减少文件打包后的体积,这样说太抽象,我们看几个截图就一目了然了

webpack 开启外部依赖后的打包后的结果

  1. 先看源码,引入方式仍然 webpack 方式的引入,使用时也是模块化使用

  1. 打包后的代码,在顶部会直接用 o = jQuery的方式来获取,而不是从自身的模块中加载,就这么一点点区别,但是 var r = e.n(o);代码还是将 jQuery 注册为 webpack 中的模块了,后续代码都会用 r() 来获取这个对象,这样外部与内部就统一了

  1. webpack.config.js 中的设置,你可以改个名 JQ试试,打包时就变成了 JQ

  1. 这是不是就学会使用了

terser 之前的那个步骤是什么样子的?

  1. 先关闭 terser,打包出来的格式如下

  1. 结构是没啥变化的,terser 因为无引用不压缩的逻辑,JQ 这个属于根变量,没有任何引入渠道,所以不会进行任何处理,因此 terser 过程是发生在代码已经 bundle 出来后,再根据抽象语法树进行混淆压缩处理,而处理的关键就是是否是根变量,赋值变量都会被重命名,例如 external_JQ_namespaceObject这些,__webpack_require__,JQ 既不是赋值变量也不是导出变量,所以不会被重命名,不信我们下面给了一个案例

  1. 我随便写了一个 wx.runtime.getURL() 这是一个不存在的变量下的函数引用,它不会被处理

源代码,被赋值的变量会被重新命名,根变量不会

  1. 得出一个结论,任何根变量都可以放心大胆地使用,不会被混淆处理,在开发 chrome exension 时,我就担心 chrome.* 这种变量是否会被改名,现在结论就是不用担心这个概念,不会被改名,只要无赋值概念,都不存在混淆改名的问题,大胆使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

‌OCP英文全称是什么

在数据库领域,OCP全称为Oracle Certified Professional,是Oracle公司提供的Oracle数据库中级认证,专门针对数据库管理员(Database Administrator,简称DBA)和数据库开发人员。以下是关于OCP认证的详细介绍: 认证领域与…

MyBatis实现数据库的CRUD

本文主要讲解使用MyBatis框架快速实现数据库中最常用的操作——CRUD。本文讲解的SQL语句都是MyBatis基于注解的方式定义的,相对简单。 Mybatis中#占位符和$拼接符的区别 “#”占位符 在使用MyBatis操作数据库的时候,可以直接使用如下SQL语句删除一条数…

微调神经机器翻译模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下载 mBART 是一个基于序列到序列的去噪自编码器,使用 BART 目标在多种语言的大规模单语语料库上进行预训练。mBART 是首批通过去噪完整文本在多种语言上预训练序列到序列模型的方…

RTX 5090 加持,科研服务器如何颠覆 AI 深度学习构架?

RTX 5090作为英伟达旗舰级GPU,凭借Ada Lovelace架构,融合创新的SM多单元流处理器、第三代RT Core与第四代Tensor Core,打造出极为强劲的计算体系。其24GB GDDR6X显存搭配1TB/s带宽,能以极低延迟和超高吞吐量处理大规模张量数据&am…

【2025最新】机器学习类计算机毕设选题80套,适合大数据,人工智能

【2025最新】机器学习类型计算机毕设选题 1-10套 基于Spring Boot的物流管理系统的设计与实现 基于机器学习的虚假招聘信息的分析与预测 基于机器学习的影响数据科学家职业变动因素的分析与预测 基于Spring Boot的历史文物交流平台的设计与实现 基于机器学习的肥胖影响因素的分…

【PPTist】幻灯片放映

放映功能的代码都在 src/hooks/useScreening.ts,我们看一下 从当前页开始 放映的功能。 // 进入放映状态(从当前页开始) const enterScreening () > {enterFullscreen()screenStore.setScreening(true) }首先是 enterFullscreen()&#…

MySQL 16 章——变量、流程控制和游标

一、变量 在MySQL数据库的存储过程和存储函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据 在MySQL数据库中,变量分为系统变量和用户自定义变量 (1)系统变量 1.1.1系统变量分类 变量由…

T-SQL编程

目录 1、T-SQL的元素 1.1 标识符 1. 常规标识符 2. 分隔标识符 1.2 变量 1. 全局变量 2. 局部变量 1.3 运算符 1. 算数运算符 2. 赋值运算符 3. 位运算符 4. 比较运算符 5. 逻辑运算符 6. 字符串连接运算符 7. 一元运算符 8. 运算符的优先级和结合性 1.4 批处…

2024 China Collegiate Programming Contest (CCPC) Zhengzhou Onsite 基础题题解

L. Z-order Curve 思路:这题目说了,上面那一行,只有在偶数位才有可能存在1,那么一定存在这样的数,0 ,1,100, 10000,那么反之,我们的数列是行的二倍,因此会出现10,1000,100000这样的数&#xff0…

Unity2D初级背包设计后篇 拓展举例与不足分析

Unity2D初级背包设计中篇 MVC分层撰写(万字详解)-CSDN博客、 如果你已经搞懂了中篇,那么对这个背包的拓展将极为简单,我就在这里举个例子吧 目录 1.添加物品描述信息 2.拓展思路与不足分析 1.没有删除只有丢弃功能,所以可以添加垃圾桶 2.格…

vue(七) vue进阶

目录 第一课:Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1:变更方法 方法2:替换一个数组 例子:小Demo:合并两个数组 二、计算属性 1.基础(不推荐) 2.使用计算属性来完成案例 3.使用函数的方…

Spring Boot 2 学习指南与资料分享

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域,Spring Boot 2 凭借其卓越的特性,为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2,以下这份精心…

YangQG 面试题汇总

一、交叉链表 问题: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 解题思想: 双指针 备注:不是快慢指针,如果两个长度相…

fastapi 使用

参考: https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API,使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

泛目录和泛站有什么差别

啥是 SEO 泛目录? 咱先来说说 SEO 泛目录是啥。想象一下,你有一个巨大的图书馆,里面的书架上摆满了各种各样的书,每一本书都代表着一个网页。而 SEO 泛目录呢,就像是一个超级图书管理员,它的任务就是把这些…

k8s基础(6)—Kubernetes-存储

Kubernetes-存储概述 k8s的持久券简介 Kubernetes的持久卷(PersistentVolume, PV)和持久卷声明(PersistentVolumeClaim, PVC)为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储,PVC是对这部分存储的请求。…

深度学习-卷积神经网络反向传播梯度公式推导

这篇文章非常棒,单样本单通道的反向传播梯度公式推导我都理解了。为了防止找不到原网页,所以特复制于此 参考: https://zhuanlan.zhihu.com/p/640697443

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion(下) 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

C#学习笔记 --- 简单应用

1.operator 运算符重载:使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类: 同名方法写在不同位置,可以当成一个类使用。 3.索引器:使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…