sourceMap的使用

摘要:
解决这个问题的方法,就是使用sourceMap。啥是sourceMap简单说,sourceMap就是一个文件,里面储存着位置信息。部分浏览器支持该功能,拿chrome为例,更多工具˃开发者工具˃DevTools˃Settings˃SourcessourceMap长啥样通过webpack、uglifyjs等工具,我们可以使用sourceMap,这里不细说配置方法,可以看这里。sourceMap是一个map文件,与源码在同一个目录下。在压缩代码的最后一行,会有这样的一个引用:...//#sourceMappingURL=main.js.map指向的就是我们的map文件。
为啥用sourceMap

这几天在搞前端错误日志,做过线上发布的都知道,我们发布到生产环境的代码,一般都有如下步骤:

  • 压缩混淆,减小体积
  • 多个文件合并,减少HTTP请求数
  • 通过编译或者转译,将其他语言编译成JavaScript

这三个步骤,都使得实际运行的代码不同于开发代码,不管是 debug 还是捕获线上的报错,都会变得困难重重。

解决这个问题的方法,就是使用sourceMap

啥是sourceMap

简单说,sourceMap就是一个文件,里面储存着位置信息。

仔细点说,这个文件里保存的,是转换后代码的位置,和对应的转换前的位置。

有了它,出错的时候,通过断点工具可以直接显示原始代码,而不是转换后的代码。

部分浏览器支持该功能,拿chrome为例,更多工具>开发者工具>DevTools>Settings>Sources
sourceMap的使用第1张

sourceMap长啥样

通过webpack、uglifyjs等工具,我们可以使用sourceMap,这里不细说配置方法,可以看这里

sourceMap是一个map文件,与源码在同一个目录下。

sourceMap的使用第2张

在压缩代码的最后一行,会有这样的一个引用:

...
//# sourceMappingURL=main.js.map

指向的就是我们的map文件。

sourceMap的格式如下:

{
    "version": 3, //SourceMap的版本,目前为3
    "sources": [
        "../src/main.js" //转换前的文件,该项是一个数组,表示可能存在多个文件合并
],
    "names": [ //转换前的所有变量名和属性名
        "add",
        "x",
        "y",
        "test",
        "console",
        "log"],
    //记录位置信息的字符串
    "mappings": "CAAA,WACI,IAAIA,IAAM,SAASC,EAAEC,GACjBC,OACAC,QAAQC,IAAIJ,EAAEC,IAElBF,IAAI,EAAE,IALV"}
来一个实际应用

sourceMap的使用第3张

为了突出主题,我这里用uglifyjs来压缩代码,并生成sourceMap,并且使用到页面上(就不再使用webpack重量级工具来示例了)。
首先安装uglifyjs,并去压缩我们的代码

uglifyjs ./src/main.js -o ./build/main.js --source-map url=main.js.map

src/main.js代码如下

(function(){
    var add = function(x,y){
        test();
        console.log(x/y)
};
    add(4,2);
})()

压缩完成后,会在build根目录下生成,压缩后的代码和sourceMap文件

然后再页面上引入压缩后的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>测试
</body>
<script src="./build/main.js"></script>
</html>

运行项目,会发现有一个报错,然后点击报错,会发现直接(通过sourceMap)定位到了源代码中的位置,很方便调试

sourceMap的使用第4张

正式环境下,建议关掉sourceMap,因为会导致打包后的体积增加

参考:https://segmentfault.com/a/1190000020213957

免责声明:文章转载自《sourceMap的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python源代码安全审计工具之Bandit【fedora】设置中文为默认语言下篇

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

随便看看

MIPS学习笔记(一)

本章涉及MIPS变量声明、数据输入和输出、地址获取、分支跳转语句,基本上对应于任何高级语言的最基本操作。该信息的确切形式因汇编程序而异。在MIPS程序集中,标签是后跟冒号的符号名称。)syscall程序的结尾与C类似,可以调用exit函数来停止程序的执行。停止MIPS程序的一种方法是使用类似于在C中调用exit的方法。MIPS中有一个移动指令,它将一个寄存器...

VMP加壳(三):VMP壳爆破实战-破解某编辑类软件

同时,记住在内存视图中向VMP0段提供断点后继续单击确认按钮,以查看调用方法的位置(此处的返回地址为0x5E01E9),但此处返回push(或vm条目)。这个地方会是验证码检测的入口吗!通过字符串查找各种键提示(sn、不正确注册等)的内存:通过访问断点查找键代码,然后找出调用该函数的函数,这与JCC指令的距离更远。...

grep多条件查找"与","或"

这里以jps命令为例jps查看全部的jvm进程"与"查找下图是所有jvm进程如果想查找256891ThriftServer服务用"与"查找可以理解为是条件查找命令:jps|grep-eer|grep-eT"或"查找方法一:grep-E'A|B'和grep-eA-eB方法二:egrep'A|B'方法三:awk'/A|B/'...

js 预览 excel,js-xlsx的使用

js-xlsx简介SheetJS生成的js-xls x是一个非常方便的工具库,只能使用纯js读取和导出excel。它功能强大,支持多种格式,支持xls、xlsx和ods等十几种格式。本文以xlsx格式为例。官方github:https://github.com/SheetJS/js-xlsx支持演示在线演示地址:http://demo.haoji.me/20...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...

Fiddler抓包7-post请求(json)(转载)

2.查看上图中的红色框:这里只支持application/x-www-form-urlencoded格式的body参数,即json格式。您需要检查JOSN列中的five和xml。1.如果遇到text/xml格式的正文,如下图所示...