模块化原理:source-map

1. webpack打包基本配置

1.安装webpack与webpack-cli npm i webpack webpack-cli
2.配置 "build":"webpack"
3. 新建webpack.config.js

const path = require('path');
module.exports = {// mode: "development",//  默认production(什么都不设置的情况下);他会把代码丑化 也可以设置'development'mode:"production",entry: './src/main.js',output: {filename: 'main.js',path: path.resolve(__dirname, './build'),}
}
  • Mode配置
  • Mode配置选项,可以告知webpack使用相应模式的内置优化:
    • 默认值是production(什么都不设置的情况下);
    • 可选值有:‘none’ | ‘development’ | ‘production’;
    • 具体配置说明官网参考
      在这里插入图片描述
  • mode配置开发与生产环境的打包
  • main.js
const a = '11111'
console.log(a);
console.log(fooc);
function foo() {console.log(a);
}
foo()
  • 当把mode设置为 production 或默认值 ,会发现打包的代码是下面的代码

  • 因为下面的代码是经过丑化的。同时发布上线也会采用这样的代码

  • 上线追求的是体积小,而不是打包速度
    在这里插入图片描述
    注意 当引用或者不引用别的模块代码时,具体的错误信息也是查找不到的

  • 但是把mode设置为 development ,会发现打包的代码是下面的代码
    在这里插入图片描述

  • 上面的代码会在eval执行的代码中,添加 //# sourceURL=;

  • eval:development模式下的默认值,也不会生成source-map,但是具体的报错位置信息很明确
    在这里插入图片描述

当引入模块化语言时mode配置开发与生产环境的打包
main.js
在这里插入图片描述

  • mode 设置为 development

在这里插入图片描述

  • 可以看出上面的代码打包后,错误的信息提示也不是很准确的
  • 当把mode设置为生成环境就更不用说了,错误信息也是不准确的,
  • 因此要查看打包后的代码具体的错误信息,就需要生成source-map文件

2. source-map基本说明

  • 在开发时代码通常运行在浏览器上时,是通过打包压缩的:
    • 也就是真实跑在浏览器上的代码,和我们编写的代码其实是有差异的;
    • 比如ES6的代码可能被转换成ES5;
    • 比如对应的代码行号、列号在经过编译后肯定会不一致;
    • 比如代码进行丑化压缩时,会将编码名称等修改;
    • 比如我们使用了TypeScript等方式编写的代码,最终转换成JavaScript;
  • 但是,当代码报错需要调试时(debug),调试转换后的代码是很困难的
  • 要想保证调式代码一致性问题就需要引入source-map
    • source-map是从已转换的代码,映射到原始的源文件
    • 使浏览器可以重构原始源并在调试器中显示重建的原始源;

2.1 source-map使用

在webpack.config.js 中配置 devtool:'source-map',

  • 再把mode 设置为生产环境或者默认不设置,打包后可以看到如下代码

在这里插入图片描述

  • 设置mode为 mode: "development" 可以也是一样
  • 具体的报错信息都是可以看到明确指定位置的
    在这里插入图片描述
  • source-map的使用
    • 根据源文件,生成source-map文件,webpack在打包时,可以通过配置生成source-map;
    • 在转换后的代码,最后添加一个注释,它指向sourcemap;
# sourceMappingURL=common.bundle.js.map
  • 注意点 要想souce-map文件生效必须保证浏览器支持souce-map文件
    在这里插入图片描述

2.2 source-map文件分析

  • 发展版本 经过三次变更 较少打包体积(原来的10倍-> 50% ->50%

在这里插入图片描述

  • version:当前使用的版本,也就是最新的第三版;
  • sources:从哪些文件转换过来的source-map和打包的代码(最初始的文件);
  • names:转换前的变量和属性名称(因为我目前使用的是development模式,所以不需要保留转换前的名称);
  • mappings:source-map用来和源文件映射的信息(比如位置信息等),一串base64 VLQ(veriable-length quantity可变长度值)编码;
  • file:打包后的文件(浏览器加载的文件);
  • sourceContent:转换前的具体代码信息(和sources是对应的关系);
  • sourceRoot:所有的sources相对的根目录;

3. devtool设置source-map解析

  1. 配置 devtool:‘source-map’,
  2. 选择不同的值,生成的source-map会稍微有差异,打包的过程也会有性能的差异,可以根据不同的情况进行选择
  • 具体的26个值设置参考
  • 重要下面几个值不会生成source-map

  • false:不使用source-map,也就是没有任何和source-map相关的内容。

  • noneproduction模式下的默认值(什么值都不写) ,不生成source-map。

  • evaldevelopment模式下的默认值,不生成source-map

    • 但是它会在eval执行的代码中,添加 //# sourceURL=
    • 它会被浏览器在执行时解析,并且在调试面板中生成对应的一些文件目录,方便我们调试代码;
  • eval其实就相当于一个函数,用于还原源文件代码,但是还原的代码不是太准确

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   foo: () => (/* binding */ foo),\n/* harmony export */   message: () => (/* binding */ message)\n/* harmony export */ });\nconst foo = 'Mssage 消息中心'\r\n\r\nfunction message() {\r\n\treturn '调用了消息中心'\r\n}\r\n\r\n\r\nmessage()\r\n\r\nconsole.log(notive);\r\n\n\n//# sourceURL=webpack://02_source_map/./src/untils/index.js?");
  • eval-source-map值
    • 会生成sourcemap,但是source-map是以DataUrl添加到eval函数的后面
  • inline-source-map值
    • 会生成sourcemap,但是source-map是以DataUrl添加到bundle文件的后面
  • cheap-source-map 值
    • 会生成sourcemap,但是会更加高效一些(cheap低开销),因为它没有生成列映射(Column Mapping)
    • 可以定位报错信息

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库总结

第一章绪论 一、数据库系统概述 1. 数据库的4个基本概念 1.数据:数据库中存储的基本对象,描述事物的符号记录。 2.数据库:长期储存在计算机内、有组织的、可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性 3.数据库管…

Mybatis异常Invalid bound statement (not found)原因之Mapper文件配置不匹配

模拟登录操作 $.post("/admin/login", {aname, pwd }, rt > {if (rt.code 200) {location.href "manager/index.html";return;}alert(rt.msg)});网页提示服务器代码错误 POST http://localhost:8888/admin/login 500后端显示无法找到Mapper中对应的…

代理模式及常见的3种代理类型对比

代理模式及常见的3种代理类型对比 代理模式代理模式分类静态代理JDK动态代理CGLIBFastclass机制 三种代理方式之间对比常见问题 代理模式 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml

前言:Hello大家好,我是小哥谈。YOLOv5配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小但检测速度最快的模型,其他4种模型都是在YOLOv5n的基础上不断…

Java中的SimpleDateFormat方法分析

Java中的SimpleDateFormat方法分析 先进行专栏介绍SimpleDateFormat方法分析 常用方法构造方法格式化(从Date到String)举例分析 解析(从String到Date)举例分析 设置方法:注意 代码示例代码结果 综合案例效果 先进行专栏介绍 本专栏是自己学J…

新能源汽车交流充电桩控制主板的功能维度

新能源汽车交流充电桩控制主板的功能维度 交流充电桩主板是电动汽车充电站的关键组件,它负责控制充电过程,保护设备和电网免受电动汽车充电的冲击。它具有控制、保护、检测、报警和记录等功能,可以有效地控制充电过程,保证交流充电…

tomcat虚拟主机配置演示

一.新建用于显示的index.jsp文件,写入内容 二.修改tomcat/apache-tomcat-8.5.70/conf/server.xml配置文件 匹配到Host那部分,按上面格式在后面添加自己的域名和文件目录信息 主要是修改name和docBase 保存退出重启tomcat,确保tomcat运行…

开源数据库Mysql_DBA运维实战 (部署服务篇)

前言❀ 1.数据库能做什么 2.数据库的由来 数据库的系统结构❀ 1.数据库系统DBS 2.SQL语言(结构化查询语言) 3.数据访问技术 部署Mysql❀ 1.通过rpm安装部署Mysql 2.通过源码包安装部署Mysql 前言❀ 1.数据库能做什么 a.不论是淘宝,吃鸡,爱奇艺…

以肠道微生物群为新视角的研究和治疗癫痫

谷禾健康 在漫长的历史中,一种神秘而令人不安的疾病一直困扰着人类,那就是癫痫。 癫痫是最常见的神经系统疾病之一,影响着全世界近7000万人。它会导致突发性的、不可控制的、反复发作的痉挛和意识丧失。 突如其来的发病行为,不仅让…

uni——不规则tab切换(skew)

案例展示 案例代码 <!-- 切换栏 --> <view class"tabBoxs"><view class"tabBox"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem":class"current item.id&…

什么是Milvus

原文出处&#xff1a;https://www.yii666.com/blog/393941.html 什么是Milvus Milvus 是一款云原生向量数据库&#xff0c;它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建&#xff0c;核心是…

开发工具Eclipse的使用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Eclipse是什么 二.使用Eclipse的…

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么?

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么? 参考链接:https://www.sohu.com/a/221664826_472880 NB IOT是窄带物联网技术,主要解决的是低速率数据传输,可使用GSM900或DCS1800频段,在频段使用上比较灵活,可以和GSM,UMTS或LTE共存,具备优异的MCL(最小耦合损耗…

7.1 动手实现AlexNet

AlexNet引入了dropput层 代码 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 样本数为1,通道数为96,11x11的卷积核,步幅为4&#xff0c;减少输出的高度和深度。 LeNet的通道数才6&#xff0c;此处96&#xff0c;为什么要增加这么多通…

Python-OpenCV中的图像处理-颜色空间转换

Python-OpenCV中的图像处理-颜色空间转换 颜色空间转换获取HSV的值 颜色空间转换 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种&#xff1a; BGR G r a y 和 B G R Gray 和 BGR Gray和BGRHSV。 注意&#xff1a;在 OpenCV 的…

python ffmpeg合并ts文件

当你从网站下载了一集动漫&#xff0c;然后发现是一堆ts文件&#xff0c;虽然可以打开&#xff0c;但是某个都是10秒左右&#xff0c;很不方便。 这时&#xff0c;可以用python合并ts文件。 &#xff08;1&#xff09;安装配置ffmpeg 官网下载ffmpeg-2023-08-07-git-d295b6b…

【80天学习完《深入理解计算机系统》】第二天 2.2 整数的表示【有符号数,无符号数,符号数的扩展,有无符号数的转变】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 引 言 随着汽车行业对于数据通信的需求不断增加&#xff0c;SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应…

python爬虫3:requests库-案例1

python爬虫3&#xff1a;requests库-案例1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网…

.NET 应用程序 部署

**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 本文内容 在设备上部署 dotnet应用&#xff0c;与任何其他平台的部署相同&#xff0c;可以2种方式&#xff1a; 依赖于框…