Vite构建前端项目,在生产环境隐藏console和debugger

前言

本文主要探讨在前端项目构建过程中,在生产环境隐藏console和debugger,需要在vite配置文件修改的内容

debugger

JavaScript的 debugger 语句会导致运行中的调试器(Chrome Dev Tools Debugger)将该语句视为自动配置的断点(breakpoint)。当调试器打开时,包含该语句的代码将自动暂停。如果没有打开调试器,则该语句不执行任何操作。从代码中删除这些语句只会阻止调试器在代码运行时自动停止。

console

JavaScript的 console.* API 函数调用,它提供了浏览器控制台调试的API接口。例如console.info() , console.count(), console.log(), console.time(), console.error()等等

问题

项目最近升级到了vue3, vite4之后上线,遇到问题是生产环境需要隐藏console和debugger,因选择的压缩工具而异,在这片文章我们分别介绍esbuild和terser两种方案

Terser 压缩

我们需要更改vite的构建选项
如下:


// vite.config.jsimport { defineConfig } from 'vite'export default defineConfig(({ command, mode }) => {return {// 此处忽略有关plugins, resolve, css, server, define 等配置build: {minify: 'terser',terserOptions: {compress: {drop_console: true,drop_debugger: true}}}}
})

选项说明

build

构建选项,类型是一个对象

build.minify

类型: boolean | ‘terser’ | ‘esbuild’
默认: ‘esbuild’
设置为 false 可以禁用最小化混淆,或是用来指定使用哪种混淆器。默认为 Esbuild,它比 terser 快 20-40 倍,压缩率只差 1%-2%

build.terserOptions

类型: TerserOptions
传递给 Terser 的更多 minify 选项。

build.terserOptions.compress

类型:object | boolean
默认:{}
传递给压缩的选项
设置为false 可以跳过压缩,传递对象用来确定 compress选项

build.terserOptions.compress.drop_console

类型:boolean | array
默认:false
设置为true可以丢弃对函数 console.* 的调用。如果您只想丢弃一部分 console.* 函数的调用,则可以传递类似 ['log', 'info'] 这样的数组,将仅丢弃 console.logconsole.info

build.terserOptions.compress.drop_debugger

类型:boolean
默认:true
删除 debugger 语句

ESBuild压缩

选项说明

esbuild.build

这是 esbuild 的主要接口。您通常会传递一个或多个入口点(entry point)文件以及各种选项进行处理,然后 esbuild 将结果写回到文件系统。这是一个简单示例:

import * as esbuild from 'esbuild'let result = await esbuild.build({entryPoints: ['app.ts'],bundle: true,outdir: 'dist',
})
console.log(result)
esbuild.build.drop

告诉esbuild在构建之前编辑源代码以删除某些构造

esbuild.build({drop: ['debugger']
})

传递此标志会导致所有的debugger语句从输出中删除,这类似于Terser JavaScript 压缩器 drop_debugger: true 提供的标志

esbuild.build({drop: ['console']
})

传递此标志会导致所有console API 调用从输出中删除。这类似于 Terser JavaScript 压缩器drop_console: true中提供的标志

打包

通过以上步骤修改了vite的构建选项build之后,在命令行输入构建命令

npm run build

部署

将项目根目录的dist文件夹压缩上传至服务器进行部署,看到生产环境的console和debugger被隐藏了

拓展

Terser

JavaScript转换和压缩工具,它对缩短变量名,删除空格和注释,并删除未使用的代码

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

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

相关文章

小程序中this(1)

}, onLoad: function() {}, }) 此时经过编译后模拟器的显示: 这里都容易理解,当点击了button按钮后,触发点击事件执行testfun函数,将test02设置为8,如图: 通过this.data.test028这种方式直接赋值可以吗&…

[深度学习] 门控循环单元GRU

门控循环单元(Gated Recurrent Unit, GRU)是一种用于处理序列数据的递归神经网络(Recurrent Neural Network, RNN)变体,它通过引入门控机制来解决传统RNN在处理长序列时的梯度消失问题。GRU与长短期记忆网络&#xff0…

【redis】redis概述

1、定义 Redis(Remote Dictionary Server),即远程字典服务,是一个开源的、内存中的数据结构存储系统。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)…

基于springboot实现旅游网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游网站系统演示 摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率…

想远程控制手机,用哪个软件好?

很多人都想知道安卓系统或iOS系统要如何实现手机远程控制手机、电脑远程控制手机,分别需要用到什么软件,这篇文章一次说清楚。 注意,安卓系统需要是7.0及以上版本,iOS系统需要是11及以上版本。具体使用步骤请点击关注,…

windows安装Nacos并使用

Nacos(前身为阿里巴巴的Nacos Config和Nacos Discovery)是一个开源的动态服务发现、配置和服务管理平台,由阿里巴巴开发并维护。它提供了一种简单且易于使用的方式来管理微服务架构中的服务注册、发现和配置管理。 主要功能包括:…

基于React18+Appwrite实现类似Instagram的社交APP

源码地址:https://github.com/sikichan/Ins-social-media-app 请给我一个Star ⭐️ 谢谢!

Java中ArrarList和LinkedList区别

在Java中,ArrayList和LinkedList是两种常用的List实现,它们都实现了List接口,但在底层数据结构和性能特性上有显著的差异。以下是它们的主要区别: 数据结构 ArrayList:基于动态数组实现。它的底层是一个可调整大小的…

使用v-viewer实现图片预览(vue2与vue3都支持)

官方文档 vue2: GitHub - mirari/v-viewer: Image viewer component for vue, supports rotation, scale, zoom and so on, based on viewer.js vue3: Vue3图片浏览组件v-viewer,支持旋转、缩放、翻转等操作 - Miraris Blog 安装 - vue2: npm instal…

PointCloudLib-八叉树模块-无组织点云数据的空间变化检测

八叉树是一种基于树的数据结构,用于组织稀疏的三维数据。在本教程中,我们将学习如何使用八叉树实现进行检测 多个无组织点云之间的空间变化,其大小、分辨率、密度和点顺序可能有所不同。通过递归比较 八叉树的树结构,由体素配置差异所表示的空间变化可以被识别出来。 此外,…

报道 | 2024年7月-2024年9月国际运筹优化会议汇总

封面图来源: https://www.pexels.com/zh-cn/photo/1181406/ 2024年7月-2024年9月召开会议汇总: 2024 INFORMS Advances in Decision Analysis Conference (ADA) Location: Finland Important Dates: Conference: July 10-12, 2024 Details:https://w…

【云原生】Kubernetes网络知识

Kubernetes网络管理 文章目录 Kubernetes网络管理一、案例概述二、案例前置知识点2.1、Kubernetes网络模型2.2、Docker网络基础2.3、Kubernetes网络通信2.3.1、Pod内容器与内容之间的通信2.3.2、Pod与Pod之间的通信 2.4、Flannel网络插件2.5、Calico网络插件2.5.1、Calico网络模…

【吊打面试官系列-Mysql面试题】说说对 SQL 语句优化有哪些方法?

大家好,我是锋哥。今天分享关于 【说说对 SQL 语句优化有哪些方法?】面试题,希望对大家有帮助; 说说对 SQL 语句优化有哪些方法? 1、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前&#xff…

lru_cache vs cache

在Python中,lru_cache和cache都是functools模块提供的装饰器,用于缓存函数的结果,但它们的功能和使用场景略有不同。 functools.lru_cache lru_cache表示“最近最少使用”缓存。它是一个装饰器,用于缓存函数调用的结果。当缓存达…

智能工厂中滑环应用的集成式和分立式数据接口解决方案

第四次工业革命通过在生产过程中实现新场景来推动数字化制造向前发展。这些场景依赖于基本的设计原则,包括器件互联、信息透明、技术协助,以及分散决策。没有先进的无线通信技术,就无法在现代智能工厂中实现所有这些原则。它们支持在广泛的领…

Java露营基地预约小程序预约下单系统源码

轻松开启户外探险之旅 🌟 露营热潮来袭,你准备好了吗? 随着人们对户外生活的热爱日益增加,露营已成为许多人周末和假期的首选活动。但你是否曾因找不到合适的露营基地而烦恼?或是因为繁琐的预约流程而错失心仪的营地…

三大关键技术看RAG如何提升LLM的能力

大语言模型表现出色,但是在处理幻觉、使用过时的知识、进行不透明推理等方面存在挑战。检索增强生成(RAG)作为一个新兴的解决方案,通过整合外部知识库的数据,提高了模型在知识密集型任务中的准确性和可信度&#xff0c…

(9)农作物喷雾器

文章目录 前言 1 必要的硬件 2 启用喷雾器 3 配置水泵 4 参数说明 前言 Copter 包括对农作物喷雾器的支持。该功能允许自动驾驶仪连接到一个 PWM 操作的泵和(可选)旋转器,根据飞行器速度控制液体肥料的流动速度。 稍微过时的视频显示了…

AI道德文化构建:迈向可持续发展的智能未来

引言随着人工智能技术的飞速发展,AI已经逐渐融入我们生活的方方面面。然而,随着AI技术的广泛应用,人们开始关注AI的道德和文化问题。本文将探讨AI道德文化构建的重要性,以及如何实现可持续发展的智能未来。 AI人工智能发展的道德文化挑战在探讨人工智能(AI)所面临的安全威…

高质量数据不够用,合成数据是打开 AGI 大门的金钥匙吗?

编者按: 人工智能技术的发展离不开高质量数据的支持。然而,现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题,是当前人工智能领域亟待解决的一个较为棘手的问题。 本期文章探讨了一种经实践可行的解决方案 —— 合成…