当前位置: 首页 > news >正文

React 打包时如何关闭源代码混淆

React 开发中,使用 npm build 命令进行生产代码打包,为了压缩代码并尽量保证代码的安全性,React 打包时会代码进行压缩和混淆,但是有时我们需要 debug 生产环境的源代码,例如当我们调试 SSR 的项目时,需要禁用混淆。本文将介绍一种禁用生产包混淆源代码的方式。

打包源代码需要安装一下两个依赖包

  1. craco Create React App Configuration Override),修改 Webpack 配置文件。
  2. crossenv: 修改配置环境

安装依赖

yarn add cross-env --save-dev
yarn add @craco/craco --save-dev

添加配置文件

在项目根目录下添加 craco.config.js 配置文件,需要排除 react-refresh/babel,否则启动会报错。

module.exports = {webpack: {configure: (webpackConfig, { env }) => {// Enable source maps for both development and productionwebpackConfig.devtool = 'source-map';if (env === 'development') {// No React Refresh Webpack Plugin// Modify Babel loader to exclude React Refresh pluginwebpackConfig.module.rules.forEach(rule => {if (rule.oneOf instanceof Array) {rule.oneOf.forEach(oneOf => {if (oneOf.loader && oneOf.loader.includes('babel-loader')) {// Ensure no React Refresh plugin is addedoneOf.options.plugins = (oneOf.options.plugins || []).filter(plugin => !plugin.includes('react-refresh/babel'));}});}});}if (env === 'production') {// Disable minification for productionwebpackConfig.optimization.minimize = false;webpackConfig.optimization.minimizer = [];}return webpackConfig;}}
};

修改 package.json

将 package.json 配置文件中的脚本启动命令改为 craco 命令。

  "scripts": {"start": "craco start","build": "react-scripts build","test": "craco test","eject": "react-scripts eject","build:dev": "cross-env NODE_ENV=development FAST_REFRESH=true craco build","build:prod": "cross-env NODE_ENV=production craco build"},

启动并查看代码

下图中可以看到代码未混淆。

在这里插入图片描述

相关文章:

  • 图像的反转
  • K8s 集群(kubeadm) CA 证书过期解决方案
  • 【代码随想录_Day24】134. 加油站 135. 分发糖果 860. 柠檬水找零 406. 根据身高重建队列
  • 地理信息科学:生态保护的智慧经纬
  • 2024年 Java 面试八股文(20w字)
  • springcloud第4季 分布式事务seata作用服务搭建1
  • Linux上快速定位Java代码问题行
  • 云桌面运维工程师
  • 大数据------JavaWeb------JSP(完整知识点汇总)
  • Spring Boot中的安全漏洞防护
  • Django靓号管理系统:实现用户列表功能
  • react 重新加载子组件
  • 目标检测入门:3.目标检测损失函数(IOU、GIOU、GIOU)
  • 【ubuntu】切换shell并显示git分支名字
  • Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分
  • HTTP中的ETag在移动客户端的应用
  • js中forEach回调同异步问题
  • node和express搭建代理服务器(源码)
  • opencv python Meanshift 和 Camshift
  • Python实现BT种子转化为磁力链接【实战】
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 关于使用markdown的方法(引自CSDN教程)
  • 记一次和乔布斯合作最难忘的经历
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​学习一下,什么是预包装食品?​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # Apache SeaTunnel 究竟是什么?
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (6)添加vue-cookie
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (简单) HDU 2612 Find a way,BFS。
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)jdk与jre的区别
  • (转)mysql使用Navicat 导出和导入数据库
  • ***检测工具之RKHunter AIDE
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net2005怎么读string形的xml,不是xml文件。
  • @取消转义
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [Android]常见的数据传递方式
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [codeforces]Checkpoints
  • [COI2007] Sabor
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [ffmpeg] av_opt_set 解析
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页
  • [JavaEE] 线程与进程的区别详解