如何基于vite实现清除特定环境下的console和debugger

news2024/12/23 14:05:37

一、解决方法

方法一:使用esbuild

直接在vite.config.ts文件中写,无需下载插件

export default defineConfig(({ mode }) => {
  // 环境变量
  const env = loadEnv(mode, root, "");
  return {
    base: env.VITE_PUBLIC_PATH,
    plugins: [
      vue(),
      ...
    ],
    resolve: {
      ...
    },
    server: {
     ...
    },
    esbuild: {
      drop: mode === "production" ? ["console", "debugger"] : []
    }
  };
});

若无需环境配置,可改为

esbuild: {
      drop:["console", "debugger"]
    }

方法二:使用terser

第一步:安装terser插件

npm i -g terser 

在package.json中出现如下即为安装成功 

第二步:在vite.config,ts中写入

export default defineConfig(({ mode }) => {
  // 环境变量
  const env = loadEnv(mode, root, "");
  return {
    base: env.VITE_PUBLIC_PATH,
    plugins: [
      vue(),
      ...
    ],
    resolve: {
      ...
    },
    server: {
     ...
    },
    build: {
      minify: "terser",
      terserOptions: {
        compress: {
          //生产环境时移除console
          drop_console: mode === "production",
          //生产环境时移除debugger
          drop_debugger: mode === "production"
        },
        output: {
          // 去除注释
          comments: false, 
        },
        //是否压缩变量名
        mangle: false,
      },
      rollupOptions: {
        ...
      }
    }
  };
});

若无需环境配置,可改为

build: {
      minify: "terser",
      terserOptions: {
        compress: {
          //移除console
          drop_console: true,
          //移除debugger
          drop_debugger: true
        },
        output: {
          // 去除注释
          comments: false, 
        },
         //是否压缩变量名
        mangle: false,
      },
      rollupOptions: {
        ...
      }
    }

二、terser简介

Terser 是一个 JavaScript 代码压缩工具,通过去除不必要的空格、换行和注释,能够减少 JavaScript 文件的大小,提高页面加载速度。

可以通过下面这个网站体会压缩过程:

https://www.toptal.com/developers/javascript-minifier

三、代码压缩的原理

Terser工作原理的核心在于代码压缩和混淆技术。

1.代码压缩

  • 移除代码中的所有不必要的空白字符、注释以及未使用的代码(死代码)
  • 对变量名、函数名进行缩短(缩短作用域内未混淆的标识符)
  • 代码的重组,这一步骤涉及将代码重写为更紧凑的语法形式,例如,将多个变量声明合并为一个,或者将多个小的条件表达式合并为一个大的表达式。

2.混淆技术

混淆技术是提高JavaScript代码安全性的重要手段。其主要目的是使代码难以被人类理解,同时也尽量避免影响到运行时的性能。

  • 变量名和函数名缩短
  • 属性名缩短 :作用于对象属性。
  • 作用域分析 :通过分析变量的作用域,确保只有在必要时才进行变量提升
  • 字符串保护 :避免直接在代码中暴露敏感字符串,通过一些特殊处理使字符串在压缩后的代码中不易被轻易识别。

但是过分的混淆可能导致性能下降或调试困难,因此通常需要在压缩率和代码可读性之间做出平衡。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国书法-孙溟㠭浅析碑帖《九成宫醴泉铭》

中国书法孙溟㠭浅析碑帖《九成宫醴泉铭》 《九成宫醴泉铭》是由魏征撰文、欧阳询书丹,唐贞观六年(公元632年)立碑,篆书体题碑额。内容记载了唐太宗李世民在九成宫避暑山庄发现涌泉的事。 书法法度森严,腴润中见峭劲&…

图文并茂解释水平分表,垂直分表,水平分库,垂直分库

文章目录 1.垂直角度(表结构不一样)垂直分表:垂直分库: 2.水平角度(表结构一样)水平分库:水平分表: 1.垂直角度(表结构不一样) 垂直分表: 将一个表字段拆分成多个表,每个表存储部分字段。好处是避免IO时锁表的次数,分…

数据结构——遍历二叉树

目录 什么是遍历二叉树 根据遍历序列确定二叉树 例题(根据先序中序以及后序中序求二叉树) 遍历的算法实现 先序遍历 中序遍历 后序遍历 遍历算法的分析 二叉树的层次遍历 二叉树遍历算法的应用 二叉树的建立 复制二叉树 计算二叉树深度 计算二…

java发起POST方法请求第三方接口(编码处理)

文章目录 引言I 案例查询船舶轨迹配置JVM编码参数请求提供方常见问题II 工具类III 知识扩展:程序运行源代码各个阶段对编码的处理Java源码--->字节码Java字节码--->虚拟机--->操作系统操作系统-->显示设备引言 使用场景: 调用第三方平台接口 I 案例 查询船舶…

【MySQL】--数据类型

文章目录 1. 选择数据库1.1 语法 2. 查询当前选中的数据库2.1 语法 3. 常见数据类型分类4. 数据值类型4.1 类型列表4.2 数据类型取值范围 5. 字符串类型5.1 类型列表5.2 关于排序5.3 CHAR和VARCHAR的区别5.4 如何选择CHAR和VARCHAR5.5 VARCHAR与TEXT的区别 6. 日期类型6.1 类型…

基于SSM的仿win10界面的酒店管理系统

基于SSM的仿win10界面的酒店管理系统 运行环境: jdk1.8 eclipse tomcat7 mysql5.7 项目技术: jspssm(springspringmvcmybatis)mysql 项目功能模块:基础功能、房间类型、楼层信息、附属功能

重学SpringBoot3-集成Redis(六)之消息队列

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(六)之消息队列 1. 什么是发布/订阅(Pub/Sub)?2. 场景应用3. Spring Boot 3 整合 R…

EtherNet/IP 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherNet/IP 转 EtherNet/IP GW系列型号 MS-GW22 概述 简介 MS-GW22 是 EtherNet/IP 和 EtherNet/IP 协议转换网关,…

4.扩散模型的似然函数最大化(1)

1.似然函数最大化 扩散模型的训练目标是负的对数似然的一个变分下界(VLB)。在本节中,我们总结并调查最近关于扩散模型的似然最大化的工作。首先我们介绍似然函数最大化的意义,然后重点讨论3种类型的方法:噪声调度优化、逆向方差学习和精确的对数似然估计…

20年408数据结构

第一题: 解析:这种题可以先画个草图分析一下,一下就看出来了。 这里的m(7,2)对应的是这图里的m(2,7),第一列存1个元素,第二列存2个元素,第三列存3个元素,第四列存4个元素,第五列存5个元素&#…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”,我们该何去何从? 想象一下,你向最新的GPT模型提问:“9.9和9.11哪个大?”这本应是个小菜一碟的问题,却足以让不少高科技的“大脑”陷入沉思, 甚至给出令人啼笑皆非的答案。近…

卡码网104.建造最大岛屿

题目 104. 建造最大岛屿 (kamacoder.com) 代码&#xff08;ACM 首刷看解析&#xff09;&#xff1a; #include<iostream> #include<vector> #include<unordered_map> #include<unordered_set> using namespace std;int dir[4][2] {1,0,-1,0,0,1,0,-…

C++ 算法学习——1.8 悬线法

1.问题引入&#xff1a;对于一个矩形图&#xff0c;图中放置着不少障碍&#xff0c;要求出最大的不含障碍的矩形。 2.分析&#xff1a;显然一个极大矩形是左右上下都被障碍挡住&#xff0c;无法再扩大的矩形&#xff0c;此时障碍也包括边界。 3.方法&#xff1a;悬线法考虑以…

计算机组成原理实验三 数据寄存器组R0..R3, MAR, ST, OUT

实验目的和要求 目的&#xff1a;了解模型机中各种寄存器结构、工作原理及其控制方法。 要求&#xff1a;利用CP226 实验系统上的K16..K23 开关做为DBUS 的数据&#xff0c;其它开关做为控制信号&#xff0c;将数据写入寄存器&#xff0c;数据寄存器组R0..R3&#xff0c;地址…

【大数据】Flink CDC 实时同步mysql数据

目录 一、前言 二、Flink CDC介绍 2.1 什么是Flink CDC 2.2 Flink CDC 特点 2.3 Flink CDC 核心工作原理 2.4 Flink CDC 使用场景 三、常用的数据同步方案对比 3.1 数据同步概述 3.1.1 数据同步来源 3.2 常用的数据同步方案汇总 3.3 为什么推荐Flink CDC 3.4 Flink …

进程间通信(匿名管道 创建管道及分配任务代码)

文章目录 一.进程间通信进程为什么要通信&#xff1f;进程如何通信 二.管道匿名管道pipe写端慢写入&#xff0c;读端等待写端写入&#xff0c;读端不读 && 管道的大小写端关闭&#xff0c;读端不会读取写端写入&#xff0c;读端关闭字节流 总结安全问题 三.进程池创建管…

VADv2 论文学习

VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning 解决了什么问题&#xff1f;相关工作感知运动预测规划自动驾驶领域的大语言模型 提出了什么方法&#xff1f;场景编码器概率规划训练分布损失冲突损失场景 Token 损失 推理 实验实验设定指标消融实…

AI类课程的笔记

信息论、导论、模式识别&#xff08;数据挖掘&#xff09;、语义网络与知识图谱、深度学习、强化学习 &#xff08;零&#xff09;信息论 详见另一篇博文 信息论自总结笔记(仍然在更新)_信息论也更新了-CSDN博客https://blog.csdn.net/sinat_27382047/article/details/12690…

【Unity踩坑】Unity导出的UWP项目编译失败

在Unity中导出了UWP平台的项目后&#xff08;Xaml或D3D&#xff09;&#xff0c;使用Visual Studio编译时发生错误&#xff1a; Error: Unity.IL2CPP.Building.BuilderFailedException: Lump_libil2cpp_vm.cpp 查找后发现是Visual Studio 与Unity兼容的问题 原贴&#xff1a;…

数据分析案例-机器学习工程师薪资数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…