始终以来被动一个问题困扰,在开发react-native利用时,无论是在Vscode或webstorm在运行Jest测试时均无奈在async和yield函数中胜利打断点,断点总是在函数头部就停下来,无奈停在await或yield下面,如此单步调试的体验极差。
尽管晓得是sourceMap的问题,然而所有该配置参数均配置了,然而还是毫无效果。
并且搜寻了良久均没有找到解决问题的方法。
通过折腾,终于发现问题所在,特此记录下.
- 首先确认是
sourceMap
的问题,因为通过babel
转码,所有须要配置生成sourcemap
。
// babel.config.js sourceMaps:"both", retainLines: true
配置此文件的目标是生成sourcemap
,就两个参数折腾了好几种组合,就TMD有效,切实郁闷。
然而如果配置必定是没有问题,然而就不无奈打断开,阐明sourcemap
有问题,然而问题出在哪里?
接下查看jest配置
发现在package.json
外面有这样一个配置项// package.json{jest:{ "presets":"react-native", "setupFiles": [ "./node_modules/react-native-gesture-handler/jestSetup.js" ]}}
下面的意思是
jest
在转码时启用了react-native
预设,该预设应该是配置了一些babel的相干参数来进行转码。
而后,还发现在babel.config.js中,启用的是另外一个预设
module.exports = { presets: ["module:metro-react-native-babel-preset"],}
难道是"module:metro-react-native-babel-preset"
和"react-native"
抵触?
好象从情理上也是说得通的,不同的预设的差别导致生成的sourcemap
不失常,从而无奈进行无效的断点定位。
因而,尝试将package.json
外面的"presets":"react-native"
删除了。
果然,断点调试恢复正常了,这阐明对问题的剖析应该是正确的。
这个问题只在时行jest单元测试时出错,所以网上也没有找到解决方案,最终一个困扰良久的问题总算失去解决。