hidden-source-map:会生成外部的built.js.map,但是在浏览器的source中会隐藏webpack://,不隐藏构建后代码
eval-source-map:也是内联的source-map,但是都会追加在built.js的每个模块引入的eval中
nosources-source-map:生成在外部,但是在浏览器的source中会隐藏我们的js源代码(有路径),构建后的js代码也看不见
cheap-source-map:生成在外部,和source-map类似但是错误提示到整行而不是整句,会受到babel的影响
cheap-module-source-map:生成在外部,和source-map类似但是错误提示到整行而不是整句,不会收到babel的影响
内联和外部的区别:外部会多生成文件,内联的构建速度会快
- 开了source-map之后,如果print.js出现某种错误会告诉你出错在源代码的哪里可以精确到文件的行和列
看视频里弹幕的老哥说不加source-map也会提示我特意关了去试试看,(好像真的一样
但是,有些情况下,点击后面的跳转是不一样的,因为这些非语法错误,而是执行错误的部分,在非source-map的情况下跳转到的是一个eval的执行内容,而使用了source-map虽然提示一样但是跳转的确实是源代码的样子
-
inline-source-map和source-map的执行效果是完全一致的只是映射的代码文件一个在.map文件中一个是内嵌在构建后的built.js中
-
hidden-source-map执行到错误后隐藏了错误源代码的位置,指挥提示原因和构建后代码的报错位置,相较于我们的default状态,他更不会暴露我的源代码
- eval-source-map相较于inlinie-source-map在控制台的报错信息末尾会多出一个hash值,对于我们跳转去观察源代码没有影响,跳转之后观察下图中的路径
- 使用nosources-source-map,会在控制台提示报错的位置和原因,但是不暴露位置sources中的webpack://下的任何代码(即我们的源代码),和hidden-source-map模式不同的是hidden模式压根就不会出现webpack://的source路径和任何js文件代码,但是nosources-source-map只是引用不到源代码的内容,路径是构建好的
- cheap-source-map和正常的source-map相比只能精确到行,而正常的可以精确到列(不包括hidden和nosources的模式),cheap-source-map在使用babel-loader时会自动转译(转译后的源代码会独立格式化分行
- cheap-module-source-map也一样不会精确到列,好像是一样的,但是这个不会被babel-loader影响,而cheap-source-map在使用babel-loader时会自动转译(转译后的源代码会独立格式化分行),因为module模式会把loader的sourcemap也加进来。
- 根据环境适配
开发环境:速度快,调试友好
(eval>inline>cheap>…)
速度快排序:
eval-cheap-source-map
eval-source-map
调试友好排序:
source-map
cheap-module-source-map
cheap-source-map
综合一下,折中推荐eval-source-map,想要更快加cheap,想要更友好加cheap-module
即eval-source-map或eval-cheap-module-source-map,前者更友好,后者更快
老师提到脚手架默认使用的是eval-source-map的方式来追溯错误源代码的
生产环境:源代码隐藏?调试友好?
内联会让代码体积变大,所以不使用内联,即排除inline和eval的模式
源代码隐藏: