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

vscode调试react 最初的源码

如果直接在react项目中打点调试, 调试的是 react-dom.development.js, 在这里插入图片描述
在这里插入图片描述

而源码里这些逻辑是分散在不同的包里的,如何才能够调试 React 最初的源码呢?
JS 代码经过编译,会产生目标代码,但同时也会产生 sourcemap。sourcemap 的作用就是映射目标代码中的位置和源码中的位置。
那这么说我们只要让 react-dom.development.js 关联上 sourcemap,就能调试最初的 React 源码了?
在这里插入图片描述

步骤如下:

  1. git clone https://github.com/facebook/react
  2. 为了保证一定能正常生成 sourcemap,建议 reset 到
    git reset --hard 80f3d88190c07c2da11b5cac58a44c3b90fbc296
  3. 打开package 里的构建打包文件: ./scripts/rollup/build.js
    在这里插入图片描述
    • 找到 rollup 的配置,添加一行 sourcemap: true,这个很容易理解,就是让 rollup 在构建时产生 sourcemap:
      在这里插入图片描述
      构建的过程中会进行多次转换,会生成多次 sourcemap,然后把 sourcemap 串联起来就是最终的 sourcemap。如果中间有一步转换没有生成 sourcemap,那就断掉了,也就没法把 sourcemap 串联起来了。只要找出没有生成 sourcemap 的那几个插件注释掉就可以了, 同样在/scripts/rollup/build.js文件中:
    1. 这个是删除 use strict 用的,可以去掉:
      在这里插入图片描述
      2:这个是生产环境压缩代码的,也可以去掉
      在这里插入图片描述
      3:这个是用 prettier 格式化代码的,也可以去掉。
      在这里插入图片描述
  4. npm run build, 这样我们就成功的 build 出了带有 sourcemap 的 react 包!
    在这里插入图片描述
    在这里插入图片描述
    我们已经 build 出了带有 sourcemap 的 react 和 react-dom 包,那把这俩包复制到测试项目的 node_modules 下,就可以直接调试最初的源码了么?
    在这里插入图片描述我们改造了 build 流程,对 react 源码进行了 build,产生了带有 sourcemap 的 react、react-dom 包,这些包最终导出的是 react-xx.development.js。
    之后在项目里引入,经过 webpack 打包,产生了 bundle.js 和 sourcemap。
    之后调试工具运行代码的时候,会解析 sourcemap,完成从 bundle.js 到 react-xxx.development.js 的映射:

但是并不会再次做 react-xx.development.js 到 react 最初源码的映射呀。
也就是调试工具只会解析一次 sourcemap。
那怎么办呢?
不打包 react 和 react-dom 这俩包不就行了。不经过 webpack 打包,那就没有 webpack 产生的 sourcemap,不就一次就映射到 React 最初的源码了么。
那怎么不打包这俩模块呢?
webpack 支持 externals 来配置一些模块使用全局变量而不进行打包,这样我们就可以单独加载 react、react-dom,然后把他们导出的全局变量配置到 externals 就行了。

  1. 初始化一个react项目
npx create-react-app my-app
  1. 新建 .vscode/launch.json

{
“configurations”: [
{
“name”: “Launch Chrome”,
“request”: “launch”,
“type”: “pwa-chrome”,
“url”: “http://localhost:3000”,
“webRoot”: “${workspaceFolder}”
}
]
}

  1. npm run eject: 项目下会多出 config 目录和 public 目录,这俩分别放着 webpack 配置和一些公共文件。
  2. 修改 webpack 配置,在 externals 下添加 react 和 react-dom 包对应的全局变量:注意这里的大小写要小心,不能写错在这里插入图片描述5. 然后把 react.development.js 和 react-dom.development.js 放到 public 下,并在 index.html 里面加载这俩文件:在这里插入图片描述
  3. 这样就表示成功了
    在这里插入图片描述参考链接:https://juejin.cn/post/7126501202866470949

相关文章:

vscode调试react 最初的源码

如果直接在react项目中打点调试, 调试的是 react-dom.development.js, 而源码里这些逻辑是分散在不同的包里的,如何才能够调试 React 最初的源码呢? JS 代码经过编译,会产生目标代码,但同时也会产生 sourcemap。sourcemap 的作用就是映射目…...

Netty网络通信模型

传统IO模型: 传统IO模型就是阻塞IO,即处理业务逻辑的线程去进行IO,当然IO操作很耗时,然后线程就得阻塞,当然CPU会回收该线程的时间片,把该线程挂起,切换到其他线程去执行,在并发量大…...

.NET快速对接极光消息推送

什么是消息推送? 很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的“消息推送”。 常见的一些APP消息推送…...

Doris:多源数据目录(Multi-Catalog)

目录 1.基本概念 2.基本操作 2.1 查看 Catalog 2.2 新增 Catalog 2.3 切换 Catalog 2.4 删除 Catalog 3.元数据更新 3.1手动刷新 3.2定时刷新 3.3自动刷新 4.JDBC Catalog 4.1 上传mysql驱动包 4.2 创建mysql catalog 4.3. 读取mysql数据 1.基本概念 …...

建行驻江门市分行纪检组以政治谈话压责任促发展

开展政治谈话,是加强“一把手”和领导班子监督、严肃党内政治生活、加强对党员领导干部日常教育管理的有效手段。 为督促“一把手”和领导班子成员依法依规履行职责、行使权力,推动党中央重大决策部署以及建设银行总行、广东省分行党委的决策部署在本单…...

如何从存档服务器上完全删除PDM用户

当创建新用户时使用“PDM 登录”类型(如下图),PDM用户名和密码会存储于存档服务器的注册表中。 存档服务器的注册表位置如下: HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Applications\PDMWorks Enterprise\ArchiveServer\ConisioU…...

导师对学生学术论文的指导包括哪些方面,请详细展开说明

导师在指导学生学术论文时涉及多个方面,这些方面旨在帮助学生培养独立研究和学术写作的能力。以下是一些导师可能涉及的主要方面: 1.选题和课题确定: 导师会与学生讨论潜在的研究兴趣和方向,帮助学生选择一个既有研究价值又符合其…...

嵌入式软件开发是个啥职业?

在硬件行业中,有一类工作岗位是更偏向软件的,或者说是软硬结合非常紧密的工作,那就是嵌入式开发工程师。 说起嵌入式,可能很多没有接触过电子类的人没有听说这些东西。 其实简单来说,嵌入式开发就是写程序去控制硬件电…...

03【远程协作开发、TortoiseGit、IDEA绑定Git插件的使用】

上一篇:02【Git分支的使用、Git回退、还原】 下一篇:【已完结】 目录:【Git系列教程-目录大纲】 文章目录 一、远程协作开发1.1 远程仓库简介1.1.1 Github1.1.2 Gitee1.1.3 其他托管平台 1.2 发布远程仓库1.2.1 创建项目1) 新…...

Linux:centos7通过yum安装mysql的方法

1. 检查mysql是否安装 yum list installed | grep mysql如果有的话,就全部卸载 yum -y remove 数据库名称2. MySQL依赖libaio,所以先要安装libaio yum search libaio # 检索相关信息 yum install libaio # 安装依赖包3. 下载MySQL Yum Repository 如…...

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:参照【算法与数据结构】131、LeetCode分割回文串的思路,需要将IP字符串进行分割&#xff0…...

uniapp点击图片放大预览

阐述 有些时候我们在用uniapp显示图片时&#xff0c;有的不宜全部显示到屏幕上&#xff0c;uniapp提供了一个非常好用的api。 实现方式如下&#xff1a; <template><view class"content"><image class"logo" src"/static/images/a.…...

Java TreeMap

TreeMap 是一个基于 key 有序的 key value 散列表。 map 根据其键的自然顺序排序&#xff0c;或者根据 map 创建时提供的 Comparator 排序不是线程安全的key 不可以存入null底层是基于红黑树实现的 TreeMap 的类结构图&#xff1a; 实现了 NavigableMap 接口&#xff0c;Na…...

ubuntu 内网源如何搭建 —— 筑梦之路

为什么要搭建内网源&#xff1f; 原因&#xff1a;内网开发环境由于其特定原因不能上外网&#xff0c;所以需要本地环境下的内网源来方便开发人员下载安装软件 搭建建议 单独使用一块磁盘来存放源文件或者单独一个目录下&#xff0c;避免混淆。 环境说明 ubuntu 系统 两张…...

测试用例的设计方法(黑盒)

1.基于需求的设计方法 比如针对网易邮箱进行测试&#xff1a;分为功能相关和非功能相关两大类 但是这么设计的话&#xff0c;有无数多个测试用例&#xff0c;我们现在看到的只是一些大概的测试用例&#xff0c;要想设计具体的测试用例&#xff0c;需要用到下面测试用例的方法…...

Shell编程入门--概念、特性、bash配置文件

目录 一、Shell概念1.定义2.分类和使用场景2.1.分类和切换2.2.使用场景 3.特性3.1.文件描述符与输出重定向3.2.历史命令---history3.3.别名 --alias3.4.命令排序执行3.5.部分快捷键3.6.通配符置换 4.脚本规范5.脚本运行方式5.1.bash脚本执行5.2.bash脚本测试 二、bash配置文件1…...

读书笔记:彼得·德鲁克《认识管理》第14章 工作、做工与员工

一、章节内容概述 虽然工作的历史与人类一样久远&#xff0c;但对工作展开系统研究不过是近百年之内的事&#xff0c;并且“做工”&#xff0c;也就是人从事工作&#xff0c;迄今为止仍很少受到 系统关注。然而我们知道&#xff0c;工作和做工不同&#xff0c;工作是客观的“事…...

diffusers库中stable Diffusion模块的解析

diffusers库中stable Diffusion模块的解析 diffusers中&#xff0c;stable Diffusion v1.5主要由以下几个部分组成 Out[3]: dict_keys([vae, text_encoder, tokenizer, unet, scheduler, safety_checker, feature_extractor])下面给出具体的结构说明。 “text_encoder block…...

智慧城市照明为城市节能降耗提供支持继电器开关钡铼S270

智慧城市照明&#xff1a;为城市节能降耗提供支持——以钡铼技术S270继电器开关为例 随着城市化进程的加速&#xff0c;城市照明系统的需求也日益增长。与此同时&#xff0c;能源消耗和环境污染问题日益严重&#xff0c;使得城市照明的节能减排成为重要议题。智慧城市照明系统…...

固高GTS800控制卡开发数控系统宏程序心得

在对固高GTS800控制卡做数控系统开发时&#xff0c;经过多年的总结与积累&#xff0c;总算是实现了一个数控系统的基本功能。 基本实现宏程序的译码与执行同时执行&#xff0c;虽然不是实时执行&#xff0c;但在充分利用插补缓存区的基础上&#xff0c;实现了相对的实时性。 …...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...