1.什么是sourcemap?

webpack打包后的文件会自动添加很多代码, 在开发过程中非常不利于我们去调试

因为如果运行webpack打包后的代码,错误提示的内容也是打包后文件的内容

所以为了降低调试的难度, 提高错误代码的阅读性, 我们就需要知道打包后代码和打包之前代码的映射关系

只要有了这个映射关系我们就能很好的显示错误提示的内容, 存储这个映射关系的文件我们就称之为sourcemap

2.如何开启sourcemap

https://www.webpackjs.com/configuration/devtool/

2.1在webpack.config.js中添加

devtool: "xxx",

2.2各配置项说明:

eval:

不会单独生成sourcemap文件, 会将映射关系存储到打包的文件中, 并且通过eval存储

优势: 性能最好

缺点: 业务逻辑比较复杂时候提示信息可能不全面不正确

source-map:

会单独生成sourcemap文件, 通过单独文件来存储映射关系

优势: 提示信息全面,可以直接定位到错误代码的行和列

缺点: 打包速度慢

inline:

不会单独生成sourcemap文件, 会将映射关系存储到打包的文件中, 并且通过base64字符串形式存储

cheap:

生成的映射信息只能定位到错误行不能定位到错误列

module:

不仅希望存储我们代码的映射关系, 还希望存储第三方模块映射关系, 以便于第三方模块出错时也能更好的排错

2.3企业开发配置:

development: cheap-module-eval-source-map

只需要行错误信息, 并且包含第三方模块错误信息, 并且不会生成单独sourcemap文件

production: cheap-module-source-map

只需要行错误信息, 并且包含第三方模块错误信息, 并且会生成单独sourcemap文件

devtool

构建速度

重新构建速度

生产环境

品质(quality)

(none)

+++

+++

yes

打包后的代码

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