你可能不知道的一些前端调试小技巧!

大厂技术  高级前端  Node进阶点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群

前言

在日常工作中,我们难免会碰到各式各样的线上问题,而有些问题可能因为不同环境下的数据、构建产物不同等原因导致在本地或者测试环境不易复现,如果公司内没有比较完善的线上错误监控和日志分析平台,不妨尝试下以下的调试方法,也许就能帮助你解决线上的“疑难杂症”

移动端调试

移动端很多问题需要在真机上复现,通常情况下可以借助 Charles 或 Whistle 来辅助我们实现移动端页面的生产环境问题调试,这里我们以Charles为例列举几个调试方法(如何使用Charles代理就不在这里介绍了,如果没使用过的可以查阅相关教程),看看如何让哪些开发时没有发现的问题原形毕露

Rewrite

VConsole可以帮助我们调试一些简单的问题,但大部分时候我们只会在本地或者测试环境开启,那有没有办法在生产环境使用VConsole呢,答案自然是有的,我们只需借助Charles的 Rewrite功能对我们需要访问的页面html资源进行重写,在head插入VConsole脚本即可实现。

打开Charles-Tools-Rewrite

9ce5c393845de98ef0e07410dcf49743.png

在Location处添加你需要重写的页面地址,我这里以百度为例

6bb1803dd189b2978286385872dbac1e.png

然后最主要的就是右下角的Rewrite 规则设置,简单点来说就是对返回的Response内容进行替换,将<head>替换为<head><script src="https://unpkg.com/vconsole/dist/vconsole.min.js"></script><script>var vConsole = new VConsole();</script> ,即在head标签内插入vconsole的js脚本

9a86cc6f3c32a845e5bfd8026a4a0dfe.png

保存后用连接了代理的手机设备打开百度的页面就会发现右下角多了一个VConsole的组件,然后就可以开始愉快的调试了!

ea51ddfd96853d87f27966d94467a7c6.jpeg

你也可以利用这个能力去做其他的事情,比如修改请求头信息、修改请求地址参数、修改返回数据等等,根据自己的诉求去使用所需要的能力

Map Remote

顾名思义,Map Remote就是将一个链接A 转发到 链接B,一般用于多页面业务功能跳转链路之间的某个页面的问题排查(特别是App或小程序等容器内的原生页面和webview页面之间的跳转)

同样这里以baidu为例,当访问百度的时候将请求重定向到本地服务

ff9c545c6cf2f8fd2e3a79573428af26.png

手机访问百度可以看到成功转发到了本地页面

5a063f9f2688d372dfb779d05e8766a3.jpeg

Map Local

Map Local 和 Map Remote 类似,不同点在于一个是转发到另一个远程链接(或本地服务),而Map Local是用本地文件替换请求的资源文件,一般用于排查某个文件引起的问题,由于配置方式和上述的Map Remote类似,就不再重复介绍了

Devtools调试

手动添加Source Map

我们的前端应用在生产环境不会上传source map,这时如果有异常错误,我们很难通过混淆压缩过后的代码排查真实报错原因,这时就可以通过手动添加Source Map 来帮助我们进行问题排查。

假如我们有以下一段代码,我们在点击按钮的时候主动抛出一个错误:

import logo from './logo.svg';
import './App.css';

function App() {
  const handleClick = () => {
    throw new Error('error test');
  };
  return (
    <div className='App'>
      <header className='App-header'>
        <img src={logo} className='App-logo' alt='logo' />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <button onClick={handleClick}>test</button>
      </header>
    </div>
  );
}

export default App;

此时在我们将编译生产环境的产物部署后点击按钮会发现控制台报如下错误:

1c7bc235945e37ae46b1df5c67a05bff.png

这样的一段信息很难帮助我们去定位问题,此时我们就可以通过右键添加源代码映射(Add source map)

8061acab6783c7168126338e940d62a3.png

然后将本地的sourcemap地址填写并添加

0ee143c0e0ef3db677a9862a8513dba2.png

回到控制台查看错误信息就会发现已经能够展示具体的文件,点击也能查看编译前的错误代码了

455d553a4c12a345a6c97a0aac81b892.png 7e596435d487253b938b5bb2f47d54b1.png

Select选项样式调试

正常情况下如果我们想调试Select组件的选项样式,当我们右键选择检查后会发现Select会自动收起,非常麻烦

d00c3bd8644a09f8b1dc0968d356b699.png

这时就可以通过选择devtools里的更多工具-渲染-勾选模拟所聚焦的网页

c70723d4b1f965eb5e33fc0f5ff12de9.png 61ce622e2ee2bf9c861fcece129f68fe.png

这时你再在Select选项右键选择检查后就不会再收起选项,可以随意调试样式了

41c7b44bfbb5de35abee0ae991470d63.png

Hover样式调试

针对一些hover场景的样式进行调试,以Tooltips组件为例,需要注意的是关于这一块的调试方法还和你所使用的框架相关,这里分别介绍下Vue的Element UI和React的Ant Ddesign的调试区别

Element UI

将元素定位到对应的按钮,并移除按钮上绑定的mouseleave事件监听

897feb37c8be2702c4674a9cdaef2d7f.png

然后再将元素定位到tooltip组件,然后就可以修改其样式了

3525d517f07c3dc1b09c43ed21085e55.png
Ant Design

antd的组件无法通过移除事件监听器的方式去调试,简单来说是因为React的事件委托机制会将所有事件都挂在根节点上,从下图也可以看出来所有的事件都挂载在#react-content

bfb10a50ba35b3522f3a6663328c6982.png

这时我们可以通过快捷键开启断点来进行调试

先鼠标悬浮在文本上,然后按下command + (windows 下按F8) 开启断点

44dd3d59510bc9a8515326a4f66293b7.png

然后切回样式元素面板就可以调试样式了

069c437c3f5b64f6d9a5465c7fe1d079.png

结语

除了上述介绍的几种方法外,Charles和Chrome的开发者工具还有很多实用的小功能,比如重发请求、性能检测等等,感兴趣的同学可以自行翻阅相关介绍文章

Node 社群



我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

   “分享、点赞、在看” 支持一波👍
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值