vscode 无法打开 源 文件 stdio.h_VS Code 调试完全攻略(6):调试由 TypeScript 开发的 React...

每日前端夜话第345篇

翻译:疯狂的技术宅

作者:Charles Szilagyi

来源:charlesagile

9ae3703e9b919c42b79bf7c58ec45930.gif

正文共:1808 字

预计阅读时间:7 分钟

b9c95eeb316de3a53e1407be60145c5f.png

‍‍说到前端,我现在选择的武器是 React、TypeScript 和 Parcel trinity。这是一个简单、可靠而且高效的设置,只需最少的配置。本文将向你展示如何在 VS Code 中创建匹配的调试器。

c3c9bf8988cc5165a425da92a0dfe7a9.png

VS Code 调试完全攻略系列目录

cad752c0c06b1b8ca23bb06cbc916bea.png
  1. 基础知识(点击直达)
  2. 步进逐行调试(点击直达)

  3. 编辑变量并重新执行函数(点击直达)

  4. launch.json 和调试控制台(点击直达)

  5. 基于浏览器的 React 应用(点击直达)

  6. 调试用 TypeScript 开发并打包的 React  ?(?  本文)

获取代码

如果你已经有了 React、TypeScript 和 Parcel 项目,则可以跳过本节。如果没有就下载示例代码:

1git clone git@github.com:thekarel/debug-anything.git
2cd debug-anything/parcel
3yarn # or npm i

a8c8ac1d277d4ccab3db02183a813618.png

代码

代码结构

这是一个简单的应用程序:你将看到博客文章标题的列表,单击标题将会获取该文章的正文,并将其显示在列表上方。

像往常一样,这个文件夹中的代码保持尽可能的简单,以便使我们把注意力集中在调试器上。在用于生产的应用程序中,我们将会使用人性化的文件夹结构。入口是 index.html,它引入 index.tsx 并运行基本的 React 程序。

你应该关注以下文件:

1Post.ts # The Post interface type
2Posts.tsx # The post-list React component
3index.html # The entry-point
4index.tsx # The React app
5postRepository.ts # Data fetching module

总共不到 100 行,所以不要指望有什么实质性的内容?

Parcel

你可能想知道 Webpack 或 Babel 配置文件在哪里。好吧,没有!由于 Parcel 是一个零配置的打包程序,因此我们可以直接告诉它去编译代码,并且始终有效。我发现它比 Create React App 之类的其他解决方案更简单、快速。

在这个例子中,可以通过简单地将 Parcel 指向 index.html 来打包用 TypeScript 编写的整个 React 程序,这就是我们所要做的,无需为太多的事操心。值得你把一颗星星⭐️送给它:GitHub? (https://github.com/parcel-bundler/parcel)

注意:示例代码用的是 Parcel 2 alpha3。

启动服务器

yarn startnpm start 启动服务器:

1$ yarn start
2yarn run v1.22.4
3$ parcel index.html
4ℹ️ Server running at http://localhost:1234
5✨ Built in 548ms

确保你可以访问 http://localhost:1234

92b544c24758380d0ca2688c27207d36.gif

程序在启动时获取文章列表,然后在单击标题时从服务器获取所选文章的正文。

配置调试器

我们希望在调试时能够在 VS Code 中设置断点、启动调试浏览器、以及逐步调试获取初始列表和后续的远程请求。

为了使它尽可能简单和好用,我们将利用 launch.json 文件的优势。实际上已经为你准备好了?

d3fa4efc6351c8b5b256200cb9e9dd88.png

launch.json

让我们打开 .vscode/launch.json 并关注 React + TS 和 Parcel 部分:

 1{
2    "type": "chrome",
3    "request": "launch",
4    "name": "Debug React, TS, Parcel app in Chrome",
5    "url": "http://localhost:1234/",
6    "webRoot": "${workspaceFolder}/parcel",
7    "pathMapping": {
8        "__parcel_source_root": "${workspaceFolder}/parcel"
9    },
10        "skipFiles": [
11        "${workspaceFolder}/parcel/node_modules/**/*.js",
12        "/**/*.js"
13    ]
14},

顺便说一下,该配置与我们的 Create React App 示例非常相似。

typerequest 参数告诉 VS Code 在新的 Chrome 窗口中开始调试。

第一次运行后,启动器的 name 将显示在调试工具栏和 IDE 的状态栏中:

25acd6a850a7838c18777e857b34eaaf.png

name

url 需要与我们的 dev 版本的地址匹配(默认为 http://localhost:1234/)。

webRoot:与开发服务器根目录匹配的文件系统路径。通常是入口点所在的文件夹。在我们的例子中是 index.html 所在的文件夹。要注意,示例代码库中包含多个小项目。在单项目仓库中,"webRoot": "${workspaceFolder}/src" 是一个要想到的路径。

pathMapping:在当前项目的情况下,此选项是必需的,因为 Parcel 提供了一个源映射,使原始文件看起来像在 /__ parcel_source_root 下。没有这个设置,VS Code 会无法将源中的断点位置映射到运行时代码:

efeae024a55eb47e86d80e16258c50c4.png

breakpoint bound

如果遇到 "Breakpoint set but not yet bound" 问题,请检查你的 pathMapping

你可以在调试浏览器中找到正确的路径。在 Chrome 中,打开开发者控制台,然后转到“Sources”:

218576738e19acd04d5cc3f5f7411e81.png

查找 map name

最后,我们设置 skipFiles,使调试器永远不会 Step Into 第三方或核心 Node.js 模块。如果你想专注于自己的代码并且对花时间看库代码不感兴趣,那么跳过此类文件非常有用,强烈建议你进行调整。

使用 React + TypeScript 调试器

确保 dev 服务器正在运行,然后启动调试浏览器:

7c5490db9eb1823e7d4200d8a02f3c9b.gif

添加两个断点:一个在 fetchBody 函数内部,另一个在 useEffect hook 中:

cd747d0f6b60f25636993a911d3ba1ba.png

break point

现在,我们可以重新启动调试器(而不是服务器!),并在首次安装组件时检查 hook 的行为:

f48b745f473fadd1c9adb4b2fa0e6cc0.gif

接下来,我们可以遵循 fetchBody 的代码流程——注意我们是如何永远都看不到任何核心库或第三方库的(例如 Fetch 或 React 内部):

7524a9defe4c32c6d7e3da747b7f69cc.gif

希望你能够基于这个模板在 React/TypeScript 应用中实现舒适的调试工作流程✌️

原文链接

https://charlesagile.com/debug-react-typescript

 6e7cc1993f9ee9e34e2285b6012512d8.gif

7ba7a80962fa723daa409a2b1aa38546.gif

558ff94639d79979a2d370eb1046f18e.png

往期精彩回顾

cad05b945dcfa14d781e04d829e85e4e.png

怎样为你的 Vue.js 单页应用提速

10 个实用的 JavaScript 小技巧

它改变了 JavaScript 的体系结构——Webpack 5 Module Federation

与 JavaScript 模块相关的所有知识点

我们是怎样优化 V8 中的指针压缩的

当一个模块被导入两次时,会发生什么?

ReactJS 与 VueJS:两种流行前端 JS 框架之战

十分钟搞定 TypeScript + webpack 配置

18 个漂亮的 Bootstrap 模板

前端程序员要懂的 UI 设计知识

67d64adc707416de4faafc7d25a8e145.png 如果觉得有帮助,请点击“在看”让更多小伙伴知道
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值