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 production
      webpackConfig.devtool = 'source-map';

      if (env === 'development') {
        // No React Refresh Webpack Plugin
        // Modify Babel loader to exclude React Refresh plugin
        webpackConfig.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 added
                oneOf.options.plugins = (oneOf.options.plugins || []).filter(
                  plugin => !plugin.includes('react-refresh/babel')
                );
              }
            });
          }
        });
      }

      if (env === 'production') {
        // Disable minification for production
        webpackConfig.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"
    
  },

启动并查看代码

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

相关推荐
拓端研究室3 分钟前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
工一木子1 小时前
URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
前端·缓存
半点寒12W3 小时前
微信小程序实现路由拦截的方法
前端
某公司摸鱼前端3 小时前
uniapp socket 封装 (可拿去直接用)
前端·javascript·websocket·uni-app
要加油哦~3 小时前
vue | 插件 | 移动文件的插件 —— move-file-cli 插件 的安装与使用
前端·javascript·vue.js
小林学习编程4 小时前
Springboot + vue + uni-app小程序web端全套家具商场
前端·vue.js·spring boot
柳鲲鹏4 小时前
WINDOWS最快布署WEB服务器:apache2
服务器·前端·windows
weixin-a153003083165 小时前
【playwright篇】教程(十七)[html元素知识]
java·前端·html
ai小鬼头5 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
wen's5 小时前
React Native 0.79.4 中 [RCTView setColor:] 崩溃问题完整解决方案
javascript·react native·react.js