webpack提升开发体验SourceMap

news2024/10/7 6:51:00

一、开发场景介绍

开发中我们不可避免的会写一些bug出来,这时候要调试,快速定位到bug到底出现在哪尤为关键。

例如我故意在sum函数中写一个错误代码如下:
在这里插入图片描述
这时我们用前面章节已经写好的开发模式的webpack.dev.js运行,控制台会出现如图提示:
在这里插入图片描述
我们点击它报错的文件行数点进去看看
在这里插入图片描述
它给出的错误提示的文件是编译后的代码文件,我这里是这个例子比较简单,还是可以一眼看出啦问题在哪,可是实际开发中肯定比这复杂的多,如果想通过编译后的文件定位问题,肯定要废一番功夫。

这时我们迫切需要一个助手帮我们实现从编译后的文件映射到源文件代码出错的位置,这就是SourceMap干的活。

二、什么是SourceMap

Webpack中的sourcemap是一种调试工具,它将编译后的Javascript代码映射回原始源代码,使得开发者在调试时可以方便地追踪代码执行的过程。

Webpack编译代码时,它会将原始源代码转换为一个或多个目标文件。如果代码中存在错误,开发者需要能够确定错误发生的位置,这时就需要使用sourcemap

sourcemap是一个包含源代码和目标代码之间映射关系的JSON文件。生成的sourcemap文件可以通过浏览器的开发者工具进行加载,在调试器中可以查看源代码和目标代码的映射关系,以及每个语句的执行过程。

使用sourcemap可以避免在部署时暴露源代码,同时也方便了开发者在调试时快速定位错误

sourcemap有以下使用场景

  1. 调试:当代码出现错误时,sourcemap可以帮助开发者快速定位到源代码中出现错误的位置,从而调试程序。

  2. 优化sourcemap可以提供详细的代码映射,这有助于开发者分析代码,并找到可以进行优化的地方。

  3. 压缩webpack中的压缩插件会使用sourcemap来确保压缩后的代码仍然可以被映射回原始源代码。

  4. 资源追踪:当使用Webpack打包时,sourcemap可以跟踪资源文件的位置并将它们映射回原始源代码的位置,从而更容易的维护和管理资源。

三、在webpack.config.js中配置

配置其实很简单,就在文件中加个配置项devtool,主要是要根据项目需求配置合适的值

module.exports = {
  // 其他省略
  mode: "development",
  devtool: "cheap-module-source-map",
};

官网教程地址:https://webpack.docschina.org/configuration/devtool/

1. 对于开发环境devtool的配置项

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

  • 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() 执行。这是 “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)。

2.特定场景devtool的配置项

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

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

3.对于生产环境devtool的配置项

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

  • (none)(省略 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 不包含 sourcesContent(源代码内容)。它可以用来映射客户端上的堆栈跟踪,而无须暴露所有的源代码。你可以将 source map 文件部署到 web 服务器。
    这仍然会暴露反编译后的文件名和结构,但它不会暴露原始代码。

所以根据上面介绍我们在开发环境配置eval-source-map这个属性最合适
生产环境中配置 nosources-source-map这个属性合适

4. 配置开发环境

  • webpack.dev.js
module.exports = {
  // 其他省略
  mode: "development",
  devtool: "eval-source-map",
};

配置完成之后我们重新运行项目

npm run dev

这时再去看看控制台报错
在这里插入图片描述
点进去看看
在这里插入图片描述
这时就准确的定位到了源文件的出错位置。

以上就是sourceMap介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】— MyBatis与Spring的整合

目录 1.整合环境1.1准备所需的JAR包1.所需Spring框架的JAR包2.所需MyBatis框架的JAR包3.MyBatis与Spring整合所需的中间JAR包4.数据库驱动JAR包5.数据源所需JAR包 1.2 编写配置文件 2.整合2.1 传统DAO方式的开发整合1&…

龙蜥社区第 17 次运营委员会会议顺利召开

5 月 26 日,龙蜥社区走进 Arm 北京办公室召开了第 17 次运营委员会会议。本次会议由龙蜥社区运营委员会副主席金美琴主持。来自 Arm、阿里云、电信、红旗软件、飞腾、海光、Intel、浪潮信息、联通软研院、龙芯、凝思软件、麒麟软件、普华基础软件、申泰、统信软件、…

Vue-Element-Admin项目学习笔记(7)用Node.js写一个简单后端接口

前情回顾: vue-element-admin项目学习笔记(1)安装、配置、启动项目 vue-element-admin项目学习笔记(2)main.js 文件分析 vue-element-admin项目学习笔记(3)路由分析一:静态路由 vue-element-adm…

Opencv-C++笔记 (3) : opencv的库介绍以及和C++对接转换

文章目录 一、Opencv库的介绍calib3dcontribcoreimgprocfeatures2dflannhighguilegacymlnonfreeobjdetectoclphotostitchingsuperrestsvideoVideostab 二、C和MAT 转换方式2.1、一维Vector2.2、二维vector2.3 数组2.4、类型转换 ——一维转 数组2.5、类型转换 -------- 一维MAT…

抖音同城榜相关介绍来啦,这篇文不若与众带你去详细了解它

一、抖音同城榜是什么? 抖音同城榜是抖音平台上的一个功能,它可以根据用户所在的地理位置,推荐附近热门的视频和达人。用户可以通过同城榜来了解当地的热门话题、美食、景点等信息,也可以通过同城榜认识志同道合的朋友和达人&…

DTD怎样进行元素类型定义?【语法格式】

Bootstrap常用组件包括按钮、导航、菜单和表单等。使用Bootstrap不需要编写复杂的样式代码,只需要使用Bootstrap组件就可以实现复杂的页面架构。下面将对Boolstrap按钮组件进行详细讲解。 Bootstrap提供了多种样式的按钮,每个样式的按钮都有自己的语义用…

动态规划:最长公共子序列

动态规划:最长公共子序列 前言一、动态规划 前言 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在…

练习1:线性回归

练习1:线性回归 介绍 在本练习中,您将 实现线性回归并了解其在数据上的工作原理。 在开始练习前,需要下载如下的文件进行数据上传: ex1data1.txt -单变量的线性回归数据集ex1data2.txt -多变量的线性回归数据集 在整个练习中&…

【IMX6ULL驱动开发学习】09.Linux驱动之GPIO中断(附SR501人体红外感应驱动代码)

Linux驱动的GPIO中断编程主要有以下几个步骤: 1、 通过GPIO号获取软件中断号 (中断编程不需要设置GPIO输入输出,当然申请GPIO,设置输入也没问题) int gpio_to_irq(unsigned int gpio)参数含义gpioGPIO引脚编号 2、 注册中断处理函数&#…

k8s中docker0默认ip修改

原因: 由于ip冲突,必须要修改docker0的默认ip 过程: (1)修改文件 /etc/docker/daemon.json 添加内容 “bip”: “ip/netmask” [ 切勿与宿主机同网段 ] (2) (3)重启docke…

视觉SLAM十四讲——ch9实践(后端1)

视觉SLAM十四讲——ch9的实践操作及避坑 0.实践前小知识介绍0.1 数据集的使用 1. 实践操作前的准备工作2. 实践过程2.1 Ceres BA2.2 g2o求解BA 3. 遇到的问题及解决办法3.1 查看.ply文件时报警告 0.实践前小知识介绍 0.1 数据集的使用 Ceres BA使用的是BAL数据集。在本例中&a…

为什么说2023年最难招聘的岗位是高性能计算工程师?

随着毕业季的临近,高校毕业生将进入就业关键阶段。据统计,2023届全国高校毕业生预计达到1158万人,同比增加82万人,再创新高。尽管有千万的大学毕业生,但是企业反馈依然很难招聘到合适的高性能计算工程师。 这主要归因于…

看到就赚到的5款小众软件

今天推荐5款十分小众的软件,知道的人不多,但是每个都是非常非常好用的,有兴趣的小伙伴可以自行搜索下载。 图文识别——PandaOCR PandaOCR是一款用于识别和转换图片中的文字的工具。它可以让你对任何格式的图片进行文字识别,并输…

STM32速成笔记—按键检测

如果需要本文程序工程,请评论区留邮箱或者私信。 文章目录 一、按键检测原理二、硬件连接三、程序设计3.1 初始化GPIO3.2 按键扫描函数 四、按键控制LED4.1 初始化LED和KEY的GPIO4.2 编写按键扫描函数4.2 编写LED控制函数4.3 编写按键服务函数 五、拓展5.1 一个按键…

如何使用二维码实现配电箱巡检

施工工地的外部环境条件恶劣,加之工地上机动车辆的运行和机械设备的应用,均易导致电气故障的发生。现场配电箱缺乏专业技术人员的管理,易造成触电伤害、火灾等事故。现场纸质巡检存在以下问题: 1、信息查询不便:配电箱信息、负责人,历史巡检维…

Flowable服务组件-扩展组件

Flowable服务组件-扩展组件 扩展组件 文章目录 Flowable服务组件-扩展组件前言Flowable给我们提供了非常丰富的组件,但是在实际场景中,我们有需要企业个性化的组件,如何扩展自己的组件至关重要 一、扩展微服务回调组件二、程序步骤1.定义我们…

618父亲节,感恩的祝福送给父亲!

父亲节(Fathers Day),是感恩父亲的节日。Fathers day, is a day of thanksgiving for fathers. 第一个提出父亲节理念的人是1906年的多德夫人。她想用一个特殊的日子来纪念她的父亲,她的妈妈多年前就去世了。起初,多德…

1.4 场效应管

1.什么是场效应管? 场效应管(Field-Effect Transistor,简称FET)是一种基于电场效应调控电流的三端器件。它是一种用于电子电路中的重要元件,常用于放大信号、开关电路和模拟电路等应用。 场效应管主要由一个导电的沟…

git 的详细介绍使用

点击下载:Git下载地址 下载完成后在本地文件夹空白位置右键能看到即为安装成功 git简介:git是一个版本控制系统,见下方图详解 快速查看git的全局配置项 git config --list --global 查看指定的全局配置项 git config user.name git conf…

【Git删除大文件失败,提示WARNING: Ref ‘refs/heads/master‘ is unchanged的解决思路】

1. 问题描述 最近使用Gitee一直在独立开发某个项目,某次因为某个测试文件比较大,超过了100MB,gitee无法接受,上传失败。但是当时我没有发现上传失败,就没有处理,等到今天发现的时候,已经提交过…