使用sourceMap文件定位小程序错误信息

摘要:
简单来说,sourceMap就是字面意思,源文件的映射,能够从压缩后的js中找到源文件对应的行列,在定位错误的时候非常有用。使用sourceMap定位小程序报错信息微信小程序后台是自带有错误日志记录的功能,原本用的还好好的,错误信息中会带出源文件的路径,顺着路径和提示信息找即可定位错误。至于sourceMap的具体原理待日后有时间再深入了解。

sourceMap是什么

在前端开发过程中代码难免会有错误,即便是再小心,也有可能出现 Cannot read property 'xxx' of null 这样的低级失误,debug自然是家常便饭。如何使用chorme的控制台进行debug也有许多技巧,但本文的关注点不在此,不予讨论。

在使用构建工具时,sourceMap相相信大多数人都见过,也知道webpack中的devtool参数可以配置打包生成的sourceMap模式,但是不见得知道如何使用,因为这都是构建工具和浏览器默认自带且默认处理的,多数人不去关注。简单来说,sourceMap就是字面意思,源文件的映射,能够从压缩后的js中找到源文件对应的行列,在定位错误的时候非常有用。

sourceMap怎么用

npm run dev开始开发vue项目,先写一段简单的vue代码

vue-app1

代码内容很简单,就是挂载组件的时候触发断点

这时候打开浏览器就会进入断点:

vue-app2

再看看我们的源码,能够发现连代码行数位置都是完美还原的,为debug提供了极大的方便(极度舒适.jpg)

但是很明显这样的代码是不能跑在浏览器中的,那浏览器是怎么做到的,查看浏览器下载的js文件 app.js

vue-app3

能够发现这一段与我们写下的vue代码基本相同,但是控制台为什么没有显示在这里debugger呢?另外在 app.js 的末尾看到这样一行

vue-app4

//# sourceMappingURL=app.js.map 这行便是向控制台指明了该文件对应的 sourceMap ,在报错或debugger时控制台会使用该sourceMap文件获得源文件及目前光标位置(不知道怎么形容就暂时称之为光标吧,也就是源文件debugger的位置)

打开 app.js.map ,它实际上是一个json文件,我装了json插件才显示成这样,但是很明显这东西我看不懂(摊手)

vue-app5

虽然我看不懂,但并不影响我用它debug,而且一般来说并不需要开发者专门配置什么,这一切都是开箱即用的。

PS:由于示例比较简单且没有压缩转译,即便没有sourceMap也一样能够调试,但是在生产环境线上代码进行压缩和babel转译后会变得非常难以调试,这时候sourceMap便会非常有用。

使用sourceMap定位小程序报错信息

微信小程序后台是自带有错误日志记录的功能,原本用的还好好的,错误信息中会带出源文件的路径,顺着路径和提示信息找即可定位错误。但是在爆出能够轻易获得小程序源码的问题后小程序官方在某个版本中加入了压缩混淆的功能(不开还是原来的样子但是开了安全系数更高),报错信息便不再有源文件的路径了。

error_message

但是这样我要怎么调试呢,总不能一个一个replace去找吧,而小程序官方提供了sourceMap文件,从上面的尝试知道sourceMap是可以帮助定位错误信息的,但是具体要怎么使用呢?

我便开启了搜索大法,寻找使用sourceMap的办法,发现只需要使用mozilla提供的source-map库即可,于是简单做了一个能够利用sourceMap和报错行数获得源码位置的页面,效果是这样的

sourceMapTool

代码在这里,使用html写的,直接复制保存就能使用

总结

sourceMap开箱即用很舒服,只需要在源码后面加一句 //# sourceMappingURL=xxx.map即可,若是没有源码只有错误信息也可以通过source-map库定位错误。至于sourceMap的具体原理待日后有时间再深入了解(手动狗头)。

参考链接

使用SourceMap定位问题

MDN:如何使用 source map

GITHUB:mozilla/source-map

免责声明:文章转载自《使用sourceMap文件定位小程序错误信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇uni-app 图片上传(uploadFile,chooseImage)添加自签发的 SSL 证书为受信任的根证书下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

小程序实现单选多选功能

小程序的单选组件radio和多选组件checkbox的样式只提供更改颜色,这对实际项目中的需求显然是不够的,所以自己模拟实现一个。 踩坑点:小程序不支持操作dom 1、模拟实现多选框: 实现思路:思路非常简单,给每个选项绑定checked属性,类型为布尔值,点击取反即可 <!--wxml--> <view class='wrap'>...

Netty服务端与客户端(源码一)

首先,整理NIO进行服务端开发的步骤: (1)创建ServerSocketChannel,配置它为非阻塞模式。 (2)绑定监听,配置TCP参数,backlog的大小。 (3)创建一个独立的I/O线程,用于轮询多路复用器Selector。 (4)创建Selector,将之前创建的ServerSocketChannel注册到Selector上,监听Select...

源码安装LNMP与搭建Zabbix

系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一、下载NMP的软件包: N:wget http://nginx.org/download/nginx-1.8.0.tar.gz P:wget http://cn2.php.net/distributions/php-5.6.28.t...

wordpress源码解析-数据库表结构(转)

如果是一个普通的用户,不需要了解wordpress数据库的结构。但是,如果你正在写一个插件,你应该会对wordpress如何处理它的数据和关系感兴趣。如果你已经尝试使用已经存在的wordpress api 去访问你需要的数据,但不直接访问数据库的情况下,这是不可能的,WordPress的提供WPDB的类,使这项任务变得简单。 WordPress数据库的11...

你真的了解python的with语句吗?通过分析contextlib源码让你彻底掌握with的用法

楔子 下面我们来聊一下Python中的上下文管理,Python中的上下文管理我们可以通过with语句实现。在Python中使用with语句最多的情况,莫过于操作文件了,比如我们在打开一个文件的时候会通过类似于with open("test.txt", encoding="utf-8") as f: 这种形式打开,这种方式的好处就在于with语句结束后会自动...

Spring5源码分析(020)——IoC篇之解析自定义标签

注:《Spring5源码分析》汇总可参考:Spring5源码分析(002)——博客汇总   默认标签的解析,前面已基本分析完毕。剩下的就是自定义标签的解析这一块: /** * Parse the elements at the root level in the document: * "import", "alias", "bean". * &l...