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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么我一直是机器视觉调机仔,为什么一定要学一门高级语言编程?

​ 为什么我是机器视觉调机仔,为什么一定要学一门高级语言编程,以后好不好就业,待遇高不高,都是跟这项技术没关系,是跟这个技术背后的行业发展有关系。 你可以选择离机器视觉行业,也可以选择与高级语言相关…

[Mac软件]Adobe Media Encoder 2024 V24.0.2免激活版

软件说明 使用Media Encoder,您将能够处理和管理多媒体。插入、转码、创建代理版本,并几乎以任何可用的格式输出。在应用程序中以单一方式使用多媒体,包括Premiere Pro、After Effects和Audition。 紧密整合 与Adobe Premiere Pro、After …

SSL证书申请安全审核失败?

随着HTTPS普及,申请安装使用SSL证书成为了我们的必备项。但这个SSL证书申请过程中,遇到问题也是不少。今天我们来浅了解一下SSL证书为什么会出现安全审核失败? SSL证书申请会出现安全审核失败的情况可能是以下原因: 域名验证不通…

农业大棚智能化改造升级与远程视频监管方案,助力智慧农业建设发展

一、需求分析 随着现代化技术的发展,农业大棚的智慧化也成为当前备受关注的智慧农业发展手段。利用先进的信息化手段来对农业大棚进行管理,采集和掌握作物的生长状况、作业监督、生态环境等信息数据,实现精准操作、精细管理,远程…

C++ | 继承和多态

目录 继承 继承的概念及用法 继承的作用域 向上转型和向下转型 继承过程中的默认生成函数 菱形继承及其解决方案 - 虚继承 虚继承的原理 - 虚基类表 继承和组合 多态 虚函数 多态的定义及使用 纯虚函数与抽象类 多态的原理 小点补充 虚表的位置 父类指针new一个…

LeetCode(3)删除有序数组中的重复项【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 26. 删除有序数组中的重复项 1.题目 给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保…

JAVA基础5:分支语句

1.流程控制 1)流程控制语句分类 顺序结构分支结构(if,switch)循环结构(for,while,do...while) 2.顺序结构 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行&a…

进程控制2——进程等待

在上一小节中我们介绍了进程的创建(fork)与退出(main函数的return与exit函数) 并且要有一个意识,进程退出的时候只有三种情况: 1.进程退出,结果正确 2.进程退出,结果不正确 3.运行异…

【Linux】tree命令的独特用法

有关tree命令,我们只知道它可以将文件目录以树状图的形式展示,但其实还有很多有意思的功能可以使用。 一、tree命令的安装 各linux版本不同,但软件包名字就叫tree,直接安装即可 ubuntu: apt install tree centos&a…

Linux驱动应用层与内核层之间的数据传递

摘要 本文将深入探讨在Linux驱动中,应用层与内核层之间数据传递的机制和优化策略。我们将详细解析这一过程中的各个步骤,包括数据从应用层到内核层的传输,以及从内核层返回应用层的过程。此外,我们将提出并评估一系列可能的优化策…

交叉编译 mysql-connector-c

下载 mysql-connector-c $ wget https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.5-src.tar.gz 注意:mysql-connector 的页面有很多版本,在测试过程中发现很多默认编译有问题,其中上面的 6.1.5 的版本呢是经过测…

京东数据分析:2023年9月京东笔记本电脑行业品牌销售排行榜

鲸参谋监测的京东平台9月份笔记本电脑市场销售数据已出炉! 9月份,笔记本电脑市场整体销售下滑。鲸参谋数据显示,今年9月份,京东平台上笔记本电脑的销量将近59万,环比下滑约21%,同比下滑约40%;销…

高德资深技术专家孙蔚:海量用户应用数据库选型、升级实践

高德地图(以下简称“高德”)作为一款用户出行必备、拥有海量用户数据的导航软件,对系统运行稳定性要求极高。 一直以来,高德每时每刻都在生产的一些数据库中的数据已经达到数百 TB,数据量的增长不仅带来存储成本的迅速…

【赠书第3期】用ChatGPT轻松玩转机器学习与深度学习

文章目录 前言 1 机器学习 2 深度学习 3 使用ChatGPT进行机器学习和深度学习 4 推荐图书 5 粉丝福利 前言 机器学习和深度学习是当前最热门的技术领域之一,这些技术正在不断地改变我们的生活和工作方式。ChatGPT 是一款基于大规模预训练模型的自然语言处理工…

漏洞扫描-nuclei-poc编写

0x00 nuclei Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发,具有很强的可配置性、可扩展性和易用性。 提供TCP、DNS、HTTP、FILE 等各类协议的扫描,通过强大且灵活的模板,可以使用Nuclei模拟各种安全检查。 …

Hadoop架构、Hive相关知识点及Hive执行流程

Hadoop架构 Hadoop由三大部分组成:HDFS、MapReduce、yarn HDFS:负责数据的存储 其中包括: namenode:主节点,用来分配任务给从节点 secondarynamenode:副节点,辅助主节点 datanode:从节点&#x…

京东数据分析:2023年Q3户外鞋服市场分析报告(冲锋衣行业销售数据分析)

从露营、骑行、徒步、桨板、垂钓、飞盘、滑雪到如今的city walk,近两年户外运动已经成为了年轻人新的生活方式。户外运动的爆发也刺激了人们对于鞋服在穿搭、场景化、专业性功能等方向的需求,户外鞋服市场迎来增长。 而全国性的降温则带给目前的户外鞋服…

一键创建PDF文档,高效管理您的文件资料

在繁忙的工作中,您是否曾为处理PDF文件而感到烦恼?现在,我们为您推荐一款全新的高效PDF文档管理工具——一键创建PDF文档,让您的工作效率瞬间提升! 首先,在首助编辑高手的主页面板块栏里,选择“…

都说Redux不支持非序列化数据 简单讲解非序列化数据概念 并举例说明

之前我们强调过 redux 不支持非序列化数据 它自带了序列化检查 如果存入非序列化数据 通常情况数据也可以正常存储进去 但是会报异常 大体表达的就是 你这是一个非序列化数据 我们无法提供很好的支持 如果后面出问题了 不要怪我们 那么 具体什么叫非序列化数据呢? …

Python---练习:求幸运数字6

案例: 幸运数字6(只要是6的倍数):输入任意数字,如数字8,生成nums列表,元素值为1~8,从中选取幸运数字移动到新列表lucky,打印nums与lucky。 思考: 要求是6的…