了解 sourceMap 配置

2023-11-03

Devtool 此选项控制是否生成,以及如何生成 source map。选择一种 source map 格式来增强调试过程。不同的值会明显影响到构建(build)和重新构建(rebuild)的速度。配置很多,分别有以下几种。

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

/******/ (() => { // webpackBootstrap
/*!**********************!*\
  !*** ./src/index.js ***!
  \**********************/
eval("console.log('hello world')\n\n//# sourceURL=webpack://webpack5/./src/index.js?");
/******/ })()
;

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

/******/ (() => { // webpackBootstrap
/*!**********************!*\
  !*** ./src/index.js ***!
  \**********************/
eval("console.log('hello world')//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZWJwYWNrNS8uL3NyYy9pbmRleC5qcz9iNjM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Ii4vc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc29sZS5sb2coJ2hlbGxvIHdvcmxkJykiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n");
/******/ })()

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

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

source-map eval-cheap-source-map eval-cheap-module-source-map
生成实际的文件 不生成实际的文件 不生成实际的文件
行列数能够正确映射 只是映射行数 只是映射行数
会映射到原始代码中 仅显示转译后的代码 会映射到原始代码中

特定场景

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

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 中。

inline 的意思就是说,我们 source-map 会生成单独的文件,但是为了不生成单独文件,通过将生成的内容 base64 转换了,把内容内嵌到 bundle 中了,不会产生单独的文件。

重点关注

1、添加到 eval() 中 2、添加到 bundle 中

eval 性能较好,因为可以根据文件进行缓存。所以最后推荐大家在开发环境中使用的配置是:eval-source-map,不要在生产环境使用!!!如何需要更快速度并且只需要行信息不需要列信息,你甚至可以使用 eval-cheap-module-source-map(推荐老司机使用。)

总结:cheap(低开销)的 sourcemap,因为它没有生成列映射(column mapping),只是映射行数,开发时我们有行映射也够用了,开发时可以使用cheap。

eval-source-map 就会带上源码的 sourceMap,加了 eval 的配置生成的 sourceMap 会作为 DataURI 嵌入,不单独生成 .map 文件。官方比较推荐开发场景下使用 eval 的构建模式,因为它能 cache sourceMap,从而 rebuild 的速度会比较快。

推荐:eval-cheap-module-source-map

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 sourceMap 配置 的相关文章

随机推荐

  • Python 根据Excel修改文件名称 封装成.exe程序

    目录 前言 一 实验环境 二 实现步骤 1 设计思路 2 引入库 3 具体代码 4 封装成exe程序 5 功能展示 总结 前言 公司想要一个可以在任何一个Windows电脑上能使用的工具 可以根据Excel表格内容来修改图片的名称 我本来打
  • MySQL 为什么在实际开发中一般不使用外键约束

    阿里开发手册 强制 不得使用外键与级联 一切外键概念必须在应用层解决 1 外键优点 保证数据的完整性和一致性 级联操作方便 将数据完整性判断托付给了数据库完成 减少了程序的代码量 2 外键缺点 业务数据生成顺序 未必一定可以先生成外键的值
  • 树莓派街机乱码--batocera 中文乱码 --RetroArch 中文乱码

    1 下载中文字体1 重命名为NanumMyeongjo ttf 2 打开WinSCP 连接树莓派 用户名密码为 root linux 3 替换 usr share fonts truetype nanum目录下的NanumMyeongjo
  • OIer JCY

    OIer JCY 一 初一的寒假 大雪纷飞 JCY来到了他的初中 那是坐落在长春市边缘的一栋L形的建筑 冗长的走廊两边设着教室 教室和走廊之间只有门上和靠天花板的地方开着小玻璃窗 透进来些许微弱的光线 灯又不常开着 因而整个走廊总是十分昏暗
  • k8s里面Deploy控制器的使用

    为了更好的解决服务编排的问题 kubernetes在V1 2版本开始 引入了Deployment控制器 值得一提的是 这种控制器并不直接管理pod 而是通过管理ReplicaSet来简介管理Pod 即 Deployment管理Replica
  • 剑指Offer第六十一题:序列化二叉树

    题目描述 请实现两个函数 分别用来序列化和反序列化二叉树 思路 这里序列化就是直接先序遍历即可 但是反序列化指输入序列 返回tree 这里由于左右子树位置不知道 所以在序列化的时候加入 字符 以此判断子树为空 注 这里需要使用char 转s
  • 通用Mapper插件和MyBatis拦截器的使用

    通用Mapper和MyBatis拦截器的使用 MyBatis拦截器 拦截器的使用 MyBatis 拦截器的简单实现 实例结果验证 orderBy createTime默认排序 拦截器在项目中的使用 通用Mapper 简介 使用教程 通用Ma
  • 子词切分算法

    最近使用transformer训练机器翻译模型 期间也看了一些关于数据预处理分词的方法 了解了transformer 1 的subtokenizer以及bpe算法 其中subtokenizer分为形成词汇表与处理训练文本两个部分 形成词汇表
  • 呼叫中心中间件(mod_cti基于FreeSWITCH)-排队(ACD 话务分配)接口

    进入排队 cti acd acdname maxwaittime s priority
  • I - Ultimate Army(栈)

    I Ultimate Armyhttps vjudge csgrandeur cn problem Gym 102267I include
  • Xcode工程依赖

    我使用的Xcode版本 3 2 6 通过Xcode设置工程依赖之后 Xcode会先编译被依赖工程 最后编译有依赖工程 达到控制编译顺序的目的 但是设置依赖这种办法 只适用于所有的工程拥有相同的配置 Debug与Release 这种情况下 如
  • Linux 命令 ps aux 命令解析

    一 简介 PS 是 Linux 系统命令之一 在 Linux 中是查看进程的命令 查看正处于 Running 的进程 linux 上进程有 5 种状态 运行 正在运行或在运行队列中等待 中断 休眠中 受阻 在等待某个条件的形成或接收到信号
  • 菜鸟学四轴控制器之6:刀具半径补偿算法

    为什么要有刀具补偿 想象一下 如果我们的刀具可以理想到半径无穷小 倒是不需要考虑半径的补偿 但是实际上我们用到的是刀具的边沿在雕刻物体 如下图 简单来看 好像是直接平行于轮廓进行移动就可以了 其实不然 单条直线的雕刻是平行 但是直线和直线
  • /etc/rc.d/rc.sysinit脚本分析

    bin bash etc rc d rc sysinit run once at boot time Rerun ourselves through initlog 通过 sbin initlog 命令重新运行自己 if z IN INIT
  • 【Jenkins】安装提示: this account either does not have the privilege logon as a service

    错误详情 安装 Jenkins 时系统提示如下错误 this account either does not have the privilege logon as a service 1 解决方案 2 选择 本地安全策略 按下Win R组
  • C++11之用户自定义字面量(ClassType operator““_C(param...))

    系列文章 C 11之正则表达式 regex match regex search regex replace C 11之线程库 Thread Mutex atomic lock guard 同步 C 11之智能指针 unique ptr s
  • QT开发错误集

    1 error multiple definition of QWidget 在项目 pro中 SOURCES 处添加的 h和 cpp文件有重复添加 将重复的去掉就可以了 2 VS2010 QT 很多代码下面会出现红色波浪线 项目 属性 v
  • Python员工信息作业

    作业简介 根据用户输入 来实现增删改查 处理员工信息数据 1 信息格式 2 文本数据 1 Alex Li 22 13651054608 IT 2013 04 01 2 Jack Wang 28 13451024608 HR 2015 01
  • c++ 等待子线程结束_第3篇 Linux系统编程--线程生命周期与状态

    在上一篇中 我们已经通过知道如何创建多个线程 本篇会谈论到线程的生命周期 在此之前应该了解一下线程在一个进程中的内存布局 主线程和线程栈 每个栈都是一个独立的虚拟内存分配 可以将其放置在任意位置 重要的是要注意 栈的大小通常是有限的 操作系
  • 了解 sourceMap 配置

    Devtool 此选项控制是否生成 以及如何生成 source map 选择一种 source map 格式来增强调试过程 不同的值会明显影响到构建 build 和重新构建 rebuild 的速度 配置很多 分别有以下几种 eval 每个模