kangyana / daily-question

When your heart is set on something, you get closer to your goal with each passing day.
https://www.webpack.top
MIT License
3 stars 0 forks source link

【Q102】sourceMap #102

Open kangyana opened 1 year ago

kangyana commented 1 year ago

1. source-map

source-map转译后的代码源代码 的映射关系。

2. 如何开启 source-map

devtool 选项控制是否生成,以及如何生成 source map。

string = 'eval' false

选择一种 source map 风格来增强调试过程。 不同的值会明显影响到构建和重新构建的速度。

可选值 构建性能 重构建性能 生产环境 品质 注释
false 最快 最快 打包后代码 不做处理
eval 最快 生成后代码 性能最优
eval-source-map 最慢 一般 源代码 开发环境优解
source-map 最慢 最慢 源代码 生成环境优解

3. 品质说明

4. 对于开发环境

以下选项非常适合开发环境:

eval

每个模块都使用 eval() 执行,并且都有 //# sourceURL。 此选项会非常快地构建。 主要缺点是,由于会映射到转换后的代码,而不是映射到原始代码(没有从 loader 中获取 source map),所以不能正确的显示行数。

eval-source-map

每个模块使用 eval() 执行,并且 source map 转换为 DataUrl 后添加到 eval() 中。 初始化 source map 时比较慢,但是会在重新构建时提供比较快的速度,并且生成实际的文件。 行数能够正确映射,因为会映射到原始代码中。它会生成用于开发环境的最佳品质的 source map。

eval-cheap-source-map

类似 eval-source-map,每个模块使用 eval() 执行。 这是 低开销 的 source map,因为它没有生成列映射(column mapping),只是映射行数。 它会忽略源自 loader 的 source map,并且仅显示转译后的代码,就像 devtool = eval

eval-cheap-module-source-map

类似 eval-cheap-source-map,并且,在这种情况下,源自 loader 的 source map 会得到更好的处理结果。 然而,loader 的 source map 会被简化为每行一个映射(mapping)。

5. 对于生产环境

这些选项通常用于生产环境中:

false(省略 devtool 选项)

不生成 source map。这是一个不错的选择。

source-map

整个 source map 作为一个单独的文件生成。 它为 bundle 添加了一个引用注释,以便开发工具知道在哪里可以找到它。

注意:你应该将你的服务器配置为,不允许普通用户访问 source map 文件!

hidden-source-map

source-map 相同,但不会为 bundle 添加引用注释。 如果你只想 source map 映射那些源自错误报告的错误堆栈跟踪信息,但不想为浏览器开发工具暴露你的 source map,这个选项会很有用。

注意:你不应将 source map 文件部署到 web 服务器。而是只将其用于错误报告工具。

nosources-source-map

创建的 source map 不包含 源代码。 它可以用来映射客户端上的堆栈跟踪,而无须暴露所有的源代码。 你可以将 source map 文件部署到 web 服务器。

注意:这仍然会暴露反编译后的文件名和结构,但它不会暴露源代码。

6. 特定场景

以下选项对于开发环境和生产环境并不理想。 他们是一些特定场景下需要的,例如,针对一些第三方工具。

inline-source-map

source map 转换为 DataUrl 后添加到 bundle 中。

cheap-source-map

没有列映射(column mapping)的 source map,忽略 loader 的 source map。

inline-cheap-source-map

类似 cheap-source-map,但是 source map 转换为 DataUrl 后添加到 bundle 中。

cheap-module-source-map

没有列映射(column mapping)的 source map,将 loader 的 source map 简化为每行一个映射(mapping)。

inline-cheap-module-source-map

类似 cheap-module-source-map,但是 source mapp 转换为 DataUrl 添加到 bundle 中。