source-map

简介: webpack 配置 source-map

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

/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // 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。

/*
 * ATTENTION: An "eval-source-map" devtool has been used.
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // 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。

可以映射行,没有列,如果中间经历了loader处理,只能映射到转换后的代码。不会产生新文件。

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

可以映射行,没有列,如果中间经历了loader处理,能映射到转换前的代码,也就是源码列。不会产生新文件。
source-map cheap-source-map
生成实际的文件 不生成实际的文件
行数能够正确映射 生成列映射,只是映射行数
会映射到原始代码中 仅显示转译后的代码

eval-cheap-module-source-map 比 eval-cheap-source-map 更好

说明: 仅显示转译后的代码,表示ES6转换ES5的代码中,只能映射到ES5,不能映射到ES6,但是中间经历了loader的处理,如果要正确映射到ES6,我们可以使用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
相关文章
|
2月前
|
存储 前端开发 JavaScript
深入探索WebGIS地图开发技术
随着互联网技术的不断发展,WebGIS(Web地理信息系统)逐渐成为地理信息展示与分析的重要工具。WebGIS 系统能够通过浏览器展示地图,并支持地图操作(如缩放、平移、查询等),因此在导航、城市规划、环境监测、公共安全等领域有着广泛应用。
|
存储 开发框架 安全
如何平滑将注册中心从Eureka迁移到Nacos?
Nacos与Eureka相比,Nacos的优点非常明显,当然首选Nacos作为注册中心。本文主要介绍如何从Eureka无缝平滑迁移到Nacos注册中心,业务方应用改动最小,业务应用改造一次完成迁移。
1558 0
如何平滑将注册中心从Eureka迁移到Nacos?
|
监控 固态存储 算法
如何进行硬盘碎片整理?
【10月更文挑战第1天】如何进行硬盘碎片整理?
619 2
|
编译器 Linux C语言
【Linux】编译器-gcc/g++
【Linux】编译器-gcc/g++
233 2
|
机器学习/深度学习 编解码 计算机视觉
深入 YOLOv8:探索 block.py 中的模块,逐行代码分析(一)
深入 YOLOv8:探索 block.py 中的模块,逐行代码分析(一)
|
前端开发 JavaScript Java
计算Java项目|基于SpringBoot的协力服装厂服装生产管理系统的设计与实现
计算Java项目|基于SpringBoot的协力服装厂服装生产管理系统的设计与实现
177 0
`slot` attributes are deprecated.ElementPlus搜索框,出现右侧带搜索
`slot` attributes are deprecated.ElementPlus搜索框,出现右侧带搜索
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL忘记密码后重置密码
MySQL忘记密码后重置密码
386 0
|
小程序 JavaScript 定位技术
微信小程序地图控件Map的使用
微信小程序地图控件Map的使用
308 0
|
JSON 监控 小程序
从零开始搞监控系统(5)——小程序监控
  公司目前在线上运行着一款小程序,为了能监控小程序的运行情况,自行开发了一个参数搜集的SDK,名称为 shin.js,放置在 utils 目录中。
从零开始搞监控系统(5)——小程序监控