webpack4系列教程,如何修改js调试的sourcemap模式
发布于 作者:苏南大叔 来源:程序如此灵动~大家都知道,webpack
打包过的.js
文件都是被压缩甚至混淆过的。所以,在浏览器里面,如果想调试这些.js
文件的话,会变得非常困难。一般业界解决这个问题的办法,就是设置sourcemap
。也就是一种方便调试的设置,但是,一般在生产模式的话,是不用这些sourcemap
的。
本文测试环境:mac
、node@14.2.0
、npm@6.14.4
、webpack@4.43.0
。如果你要调试的.js
代码是非常复杂的那种,则会强烈建议您开启sourcemap
。在webpack@4
中,开始sourcemap
的方式将在本文中和大家介绍。
参数设置devtool
修改webpack.config.js
的设置文件,设置devtool
参数。范例如下:
//...
module.exports = {
//...
entry: {
//...
},
output: {
//...
},
plugins: [
//...
],
devtool: 'inline-source-map',
devServer: {
//...
},
module: {
//...
},
}
在上述例子中,devtool
被设置成了inline-source-map
。也就是说,sourcemap
在.js
文件里面内联出现。
可用的选项
选项 | 说明 |
---|---|
eval | 用eval的方式生成映射关系代码,效率和性能最佳。但是当代码复杂时,提示信息可能不精确。 |
eval-cheap-source-map | 转换代码(行内) 每个模块被eval执行,并且sourcemap作为eval的一个dataurl |
eval-cheap-module-source-map | 原始代码(只有行内) 同样道理,但是更高的质量和更低的性能 |
eval-source-map | 原始代码,最高的质量和最低的性能 |
cheap-source-map | 转换代码(行内) 生成的sourcemap没有列映射,从loaders生成的sourcemap没有被使用 |
cheap-module-source-map | 原始代码(只有行内) 与上面一样除了每行特点的从loader中进行映射 |
inline-cheap-source-map | cheap有两种作用:一是将错误只定位到行,不定位到列。二是映射业务代码,不映射loader和第三方库等。会提升打包构建的速度。 |
inline-cheap-module-source-map | module会映射loader和第三方库 |
source-map | 会生成map格式的文件,里面包含映射关系的代码,原始代码 最好的sourcemap质量有完整的结果,但是会很慢 |
inline-source-map | 不会生成map格式的文件,包含映射关系的代码会放在打包后生成的代码中 |
hidden-source-map | |
nosources-source-map |
这些sourcemap
模式是苏南大叔从下面的这个代码中找到的:
从上面的代码中还可以看到,实际上是调用的coffee script
来生成sourcemap
的。上面的列表中,苏南大叔没有写详细的说明,因为苏南大叔目前暂时也无法正确分辨其细微区别,另外,个人认为,没有必要做那么多的变换...
比如,您设置个inline-cheap-module-source-map
就可以了,对于普通开发者来说,这么多设置没有啥特别的区别。一般来说,在开发环境中使用:cheap-module-eval-source-map
,在生产环境中使用:cheap-module-source-map
。
相关链接
在调试electron
的时候,也有个类似的问题,大家可以看看下面这篇文章:
总结
这篇文章,以后可能还会有续集。暂留吧。感谢各位读者的支持。苏南大叔的webpak@4
系列教程,可以通过下面的链接查看:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。