推荐 cheap-module-eval-source-map,因其兼顾构建速度快(eval 执行)、错误精确定位到源码行(cheap)、支持 loader 前原始代码映射(module),如 TypeScript 或 JSX 源文件;而 eval-source-map 过慢,source-map 写磁盘卡热更新,cheap-eval-source-map 无法回溯到原始源文件。

开发模式下选 cheap-module-eval-source-map 是目前最平衡的配置。
为什么推荐 cheap-module-eval-source-map
它兼顾了三方面关键需求:构建速度快、错误能精确定位到源码行、支持 loader 处理前的原始代码(比如 Babel 转译、TypeScript 编译、CSS 预处理器等)。
- eval:用 eval 执行模块,避免重复生成物理文件,大幅提升增量编译速度
- cheap:忽略列信息(column mapping),不解析 loader 输出代码的列号,节省开销;日常调试中行号已足够定位问题
- module:保留 loader 输入端的源码映射(例如 .ts → .js 或 .jsx → .js 的转换链),确保报错能回溯到你写的 .ts 或 .jsx 文件,而不是中间产物
其他常见选项为什么不首选
eval-source-map 精确度更高(含列信息),但构建更慢,且对多数开发场景属冗余;source-map 生成独立 .map 文件,适合生产环境,开发时每次保存都写磁盘,热更新变卡;cheap-eval-source-map 不含 module,遇到 Babel/TS 等 loader 时,错误只能定位到转译后的 JS,而非原始源文件。
配置示例(webpack.config.js)
只需在开发环境配置中加入:
立即学习“Java免费学习笔记(深入)”;
module.exports = {mode: 'development',
devtool: 'cheap-module-eval-source-map'
};
注意点
该配置仅用于 mode: 'development'。Webpack 会自动禁用压缩、开启 source map,并启用模块热替换(HMR)。切勿在生产环境使用 eval 类模式——它会把源码以字符串形式注入 bundle,存在安全与性能风险。


















