webpack的devtool
用了蛮久了,但每次都是默认使用其中几个,对其余的并不了解,这节准备吧每种方式都打包一下,看看到底有啥区别。css
devtool | 构建速度 | 从新构建速度 | 生产环境 | 品质(quality) |
---|---|---|---|---|
(none) | +++ | +++ | yes | 打包后的代码(没有sourcemap) |
eval | +++ | +++ | no | 生成后的代码 |
cheap-eval-source-map | + | ++ | no | 转换过的代码(仅限行) |
cheap-module-eval-source-map | o | ++ | no | 原始源代码(仅限行) |
eval-source-map | -- | + | no | 原始源代码 |
cheap-source-map | + | o | no | 转换过的代码(仅限行) |
cheap-module-source-map | o | - | no | 原始源代码(仅限行) |
inline-cheap-source-map | + | o | no | 转换过的代码(仅限行) |
inline-cheap-module-source-map | o | - | no | 原始源代码(仅限行) |
source-map | -- | -- | yes | 原始源代码 |
inline-source-map | -- | -- | no | 原始源代码 |
hidden-source-map | -- | -- | yes | 原始源代码 |
nosources-source-map | -- | -- | yes | 无源代码内容 |
+++ 很是快速, ++ 快速, + 比较快, o 中等, - 比较慢, -- 慢webpack
打包后只生成bundle.js
一个文件web
代码经过
eval
执行,能映射到每一个模块的代码,可是代码只能看到生成后的代码,打包和构建的速度都很快(不须要复杂转换和打包),可是不能定位到源码的真实位置浏览器
一样只有一个bundle.js
app
基本上和
eval
相似,相比而言映射的代码仍是转换过的,而不是源码,即转换过的代码,示例中其实转换过的代码和源码一直,由于只是用的js最基本的语法,因此看不到转换函数
具有上面的特性,此次能看到的代码是真正的源码,可是注意到
scss
文件和jsx
是分开的,可是只是精确到每一行.net
这一次是精确到每一列了,能够看出和上面的区别,同一行能够多段调试debug
和
cheap-eval-source-map
的区别在于不是使用eval
进行处理,而是生成.map
来映射代码,经过上图能够看到,file、sources、sourceContent、mappings,3d
- file表示打包后的文件
- source表明源文件地址
- sourceContent则是源码
- mappings表示转换过的代码和sources的映射(能够经过Source Map原理探究了解)
这个图就不列举,和上一个的区别就是.map
中存放的是源码,不是转换过的代码调试
和
cheap-source-map
相似,可是不生成.map
文件,直接在打包的文件中使用base64
存.map
文件内容,我大概对比了一下打包后的文件,inline-cheap-source-map
文件,由于转成base64
更大了
这个和上者的区别也就是个变成展现的是源码,不是转换过的代码
这个基本上是开发环境都在用的,一样和cheap-source-map
,可是不只限于行,精确到每一列,来看看.map
文件有什么变化
能看到在
.map
中多了names
,names
中其实就是每一个变量/函数名,这样就能精确到每个变量/函数,因此能够精确到每一列
看到inline
大概就明白了,就是把.map
集中到打包文件中
和source-map
基本相同,可是不会有sourceMappingURL
注释,这样你就没法定位到源文件,基本上就是生产环境能用,开发环境不能用,不用进行区分配置了。
和hidden-source-map
同样也是,开发环境能用,可是会进行映射,而且sourceContents
为空,这样你在开发环境能看到具体的目录结构,可是却看不到任何源码
eval
均是同过eval
方式处理的,不生成map文件,浏览器经过解析eval
中的字符串获得源码cheap
可是不带module
的展现的都是转换过的代码,带有module
的是源码
,可是二者都仅限行eval-source-map
和source-map
之类,没有cheap
和module
的是能映射到每个变量名的,debugger
也能单行内屡次调试hidden-source-map
和nosources-source-map
区分生产环境和开发环境,生产环境正常,开发环境或不能显示,或只能显示目录结构最后为了方便理解你去理解source map
,建议阅读Source Map原理探究了解,明白浏览器是怎样经过mappings
找到源码的位置