SourceMap 组合规则
| 类型 | 含义 |
|---|---|
| [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map | |
| source-map | 最完整的 sourcemap 文件,但是打包很慢 |
| inline-source-map | sourcemap 以 base64 格式内联在打包后的文件中 |
| hidden-source-map | 会生成外部 sourcemap 文件,但是i在目标文件中没有建立关联,不能准确提示错误位置 |
| eval-source-map | 会为每个模块生成单独的 sourcemap 文件进行内联,并使用 eval 执行 |
| nosources-source-map | 会生成 sourcemap 文件,可以看到源码目录结构,但是源码内容看不到 |
| cheap-source-map | 生成 sourcemap 文件,不包含列和 loader 的map |
| cheap-module-source-map | 生成 sourcemap 文件,不包含列但包含 loader 的 map |
使用 SourceMapDevToolPlugin 代替 devtool
const webpack = require('webpack');module.exports = {entry: {hehehe: './index.js'},plugins: [new webpack.SourceMapDevToolPlugin({include: ['hehehe.js'],exclude: /node_modules/,filename: 'sourcemap/[name].js.map',append: '\n//# sourceMappingURL=http://192.168.154.74:8080/sourcemap/[url]',module: true,columns: true,noSources: false,})]}
需要注意的是 mode 不要设置为 development,不然会有一些乱七八糟的 webpack HMR client js 会被注入进来编译为 sourcemap,而导致 sourcemap 产出失败
最佳实践
开发环境:eval-source-map
生产环境:hidden-source-map
生产环境使用了 hidden-source-map,在打包之后的源文件中没有 sourceMappingURL 映射,可以自己手动在浏览器中 add source map 添加 sourcemap 路径,比如:http://localhost:8080/hehehe.js.map这种源文件名对应 sourcemap 文件名的做法很容易被破解,所以最好是把 sourcemap 放到其他文件夹下,或者就换个服务器存储
SourceMap 的问题
SourceMap 文件是否影响网页性能?
不会影响网页性能,因为虽然 source map 文件很大,可是一般用户是不会下载的。
SourceMap 下载时机:
