webpack devtool篇

前言

devtool用作调试,在找错误方面给了我们很大的帮助,然而官网的devtool有十几种配置,用的多一点的也有七种,那么每一种代表的是什么,我们需要弄清楚,经过查阅了一些资料之后以及自己的实践,自己的总结如下

官网配置说明

image.png

看到了上面这些配置,自己和链接地址的作者最开始的状态一样,不知所云,首先右边的配置不知道是有什么区别的,然后不知道后面(仅限行是什么意思),后来找到链接地址的文章,突然明白了,我首先按照自己的理解把作者的话,在复述一遍,你们可以直接去链接地址里面去看

揭秘配置

关键字

eval, source-map, cheap, module 最常见关键字就是这几个,最后几个配置(inline, hidden, nosource下文讲),很多配置就是这几个组合起来的,那么这几个关键字是干嘛的,我们一一解释

eval:

这个关键字的意思是说, 每个模块用eval执行,并且存在@sourceUrl,就是说这种配置的devtool,在打包的时候,生成的bundle.js文件,模块都被eval包裹,并且后面跟着sourceUrl,指向的是原文件index.js,调试的时候,就是根据这个sourceUrl找到的index.js文件的。

source-map:

这种配置会生成一个带有.map文件,这个map文件会和原始文件做一个映射,调试的时候,就是通过这个.map文件去定位原来的代码位置的,

cheap:

这个意思是说,低消耗打包,什么叫低消耗,就是打包的时候map文件,不会保存原始代码的列位置信息,只包含行位置信息,所以这就解释官网图后面的说明(仅限行),可能这样说还有点不理解我们看看两张图就知道了.
第一张是设置devtool: 'source-map'的结果


image.png

可以看到,第一张图这个光标不仅在第四行,而且还在第13列
第二张devtool:'chaeap-source-map'


image.png

可以清楚的看到,这次只有行数,光标总是在最前面,因为没有保存列数

module

这个字段还没有怎么弄清除,就是知道如果加上这个字段的话,调试的代码不会被转换,会保留原始代码语法

各个配置项目打包结果

我们这次把各个配置项目都打包一次,看看结果,这是链接地址没有的部分

eval

output代码结果
image.png
线上调试代码结果
image.png
打包结果
image.png
说明

1: 首先按照eval关键字的配置说明,他会在output的bundle.js里面加入eval模块,包裹代码,并且末尾是sourceURL用来定位原始文件,上面也可以看到后面跟着是// ./index.js的
2:eval 从打包结果来看并不生成.map文件,打包出来的大小是350kB

3:
image.png

官网说这个模式下的调试文件是生成后的结果,也就是转换后的结果,从线上调试代码结果来看确实这这样的(我的函数是用箭头函数写的)
4: 从线上结果来看,确实光标有列信息

eval-source-map

output代码结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: 第一条和上面一样,但是这里不一样的是eval,和source-map一起用了,产生的结果是并没有一个map文件,而是在文件里面除了一个sourceURL还有一个surceMappingURL(这个模式比较特殊), 这个后面跟着的是map文件的base64码,他不是生成map文件,而是把map文件内容变成base64,插入到bundle.js文件中,
2: 从打包结果来看,没有map文件,原因解释了, 打包出来的大小是874kB

3:
image.png

, 从线上结果来看,确实是原始代码,没有被转换过的
4: 从线上结果来看,确实光标有列信息

cheap-eval-source-map

output代码结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: 第一条和上面的一样
2: 从打包结果来看,没有map文件,原因解释了, 打包出来的大小是869kB

3:
image.png
从线上结果来看,确实是被转换过的
4: 从线上结果来看,cheap模式下面确实光标没有列信息

cheap-module-eval-source-map

output结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: 第一条和上面的一样
2: 从打包结果来看,没有map文件,原因解释了, 打包出来的大小是870kB

3:
image.png
从线上结果来看,确实是原始代码
4: 从线上结果来看,cheap模式下面确实光标没有列信息

source-map

output结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: 因为是source-map关键字(没有eval关键字情况下), 所以生成了map文件,用于调试找到原始代码位置
2: 从打包结果来看,有map文件, index.js大小为336KB,因为map文件内容被提出来了,所以小了

3:
image.png
, 从线上结果来看,确实是map文件对应的确实是原始代码,,没有被转换
4: 从线上结果来看,确实光标有列信息

cheap-source-map

output结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: 因为是source-map关键字(没有eval关键字情况下), 所以生成了map文件,用于调试找到原始代码位置
2: 从打包结果来看,有map文件, index.js大小为336KB,因为map文件内容被提出来了,所以小了

3:
image.png

, 从线上结果来看,确实是map文件对应的确实是转换过的代码
4: 从线上结果来看,因为有cheap关键字,确实光标没有列位置信息了

cheap-mdule-source-map

这个情况和上面的区别是,线上的调试文件,是源码,没有被转换过的。平且打包的记过大一些,(不知到具体原因)

打包结果
image.png

inline-source-map

output结果
image.png
线上结果
image.png
打包结果
image.png
说明

1: inline-source-map这个也很特殊,虽然有source-map,但是也有inline字段,所以这个时候,也是生产一个map文件内容对应的base64插入到bundle.js里面去
2: 从打包结果来看,没有map文件,原因解释了, index.js大小为853KB,

3:
image.png
, 从线上结果来看,确实是map文件对应的确实是原始代码
4: 从线上结果来看,确实光标有列位置信息了

hidden-source-map

output结果
image.png
线上结果
image.png

打包结果

image.png

说明

1: 这里的hidden字段,并没有影响到souce-map字段,产生了map文件
2: 从打包结果来看,有map文件, index.js大小为336KB,

3:
image.png
,从线上结果来看并不是原始代码内容,是转化后的(和官网不一样,很有疑惑)
4: 从线上结果来看,确实光标有列位置信息了

nosources-source-map

output结果
image.png
线上结果
image.png

打包结果

image.png

说明

1: 这里的nosources字段,并没有影响到souce-map字段,产生了map文件
2: 从打包结果来看,有map文件, index.js大小为336KB,

3:
image.png

,从线上结果来看确实没有任何代码信息
4: 没有代码。更别说光标了

inline-cheap-source-map inline-cheap-module-source-map 这两个读者自己验证下,第一个应该就是没有列位置i信息,第二个应该是调试文件是原始代码,没有被转过的

如何用?

介绍了以上的区别,我们生产环境和开发环境各自用什么模式了,经过网上查找一般来说

开发环境

eval, eval-source-map, cheap-eval-source-map, cheap-module-eval-source-map, cheap-module-source-map

生产环境

source-map hidden-source-map nosources-source-map

ps! create-react-app 中开发配置用的是cheap-module-source-map, 生产环境用的是 source-map

参考资料

打破砂锅问到底:详解Webpack中的sourcemap

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较...
    不忘初心_9a16阅读 3,231评论 0 17
  • 学习流程 参考文档:入门Webpack,看这篇就够了Webpack for React 一. 简单使用webpac...
    Jason_Zeng阅读 3,106评论 2 16
  • 1. 新建一个文件夹,命名为 webpack-cli , webpack-cli 就是你的项目名,项目名建议使用小...
    鲁大师666阅读 1,459评论 1 3
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,671评论 7 110
  • 这一周反反复复的阴天,下着淅淅沥沥的雨滴。你说第一次见到我的时侯也是这样的天气。 然后,我就笑了~ “第一次遇见阴...
    二木_1988阅读 119评论 0 0