webpack03
什么是source-map
将代码编译压缩之后,,可以通过source-map映射会原来的代码,,,在调试的时候可以准确找到原代码报错位置,,,进行修改
source-map有很多值:
- eval : 会在eval执行的代码后面添加 source-map
- source-map : 生成一个独立source-map,,在整个打包后的js后面
- eval-source-map : 会在eval执行代码的后面添加source-map…但是这个source-map是以
Data url
(base64编码)嵌入进去的。。。。为什么写在eval()
中,因为这种source-map的魔法注释,只有在eval()
函数中才生效,,其他函数不生效 - inline-source-map : 生成sourcemap,在打包js的后面,但是是以
Data url
形式 - cheap-source-map : 会生成sourcemap,但是会更高效一些,因为他没有生成列映射(column mapping),也就是说,,只会定位到哪一行错了,,不会定位到哪一列
- cheap-module-source-map: 在
cheap-source-map
的基础上,对来自于loader的source-map会处理的更好,,,,,当代码被loader处理过,,比如说ts-loader
,,使用cheap-source-map
映射出的代码,是有一些差距的,,需要使用cheap-module-source-map
- hidden-source-map : 会生成sourcemap,但是不会对 source-map文件进行引用,,相当于删除了打包文件中对sourcemap的引用注释
- nosources-source-map : 会生成sourcemap,但是生成的sourcemap只有错误信息的提示,不会生成源代码文件
vue脚手架使用的是 source-map
react脚手架使用 cheap-module-source-map
,
开发或者测试阶段: 推荐使用 source-map
和 cheap-module-source-map
发布阶段: 不写
source-map 结构
- version : 版本
- file: 打包之后生成的文件名
- mapping : source-map的核心,描述编译后代码的每一行,以及他和源代码的映射关系
- names: 丑化js之后,,转换之前的变量 和 丑化的变量,,的对应关系
- sources : 源文件js,的位置
- sourcesContent: 源文件内容数组,,与sources对应
- sourceRoot: 源文件的相对根目录,,可以和
sources
中的路径拼接,构成完整路径
浏览器会根据注释去加载source-map,还原源代码
wepack中mode模式:
- none
- development
- production : 默认
development
和 production
下面分别有自己的配置,,相当于设置一个,就等于默认使用了配置好的参数,,,
在 development
模式下的 source-map 是 eval
,production
默认是没有source-map
babel
Babel
是一种javascript编译器:
- es6转换成浏览器兼容的javascript
- typescript转换
- jsx转换 ===》 vue中也可以用jsx
本质是一个工具链,和postcss很类似,,,是一种微内核架构
,只会保留自己的核心代码,,, 自己可以写插件扩展功能
babel命令行使用
插件的使用
babel他可以脱离webpack使用,,,命令行使用需要@babel/cli
- 插件的使用
- 安装依赖
npm install @babel/core @babel/cli -D # 安装插件 # 转换箭头函数 npm install @babel/plugin-transform-arrow-functions # 将let或者const转换为var npm install @babel/plugin-transform-block-scoping
- 命令行使用插件
npx babel ./src/main.js --out-file dist/index.js --plugins=@babel/plugin-transform-arrow-functions,@babel/plugin-transform-block-scoping
- preset 预设的使用
Babel中除了插件(Plugins)外,,还有一种叫预设(Presets)
的概念,,,预设是Babel的一组插件的组合,,针对特定的目标,封装了多个插件的配置,,让开发者不需要一个个手动配置插件。。他会帮你去找对应的插件解析,,预设的分类: @babel/preset-env
: 将高级js ===》 浏览器识别的js@babel/preset-react
: 支持 jsx编译@babel/preset-typescript
: 支持typescript编译
- 安装依赖
npm i @babel/preset-env
- 命令行使用
npx babel ./src/main.js --out-file dist/index.js --presets @babel/preset-env
webpack整合babel
- 安装依赖
npm i babel-loader
- 通过插件
const path = require("path");
module.exports = {mode:"development",devtool: "source-map",entry:"./src/main.js",output:{filename:"bundle.js",path: path.resolve(__dirname,"./dist")},module:{rules:[{test:/\.js$/,exclude:/node_modules/,use:[{loader:"babel-loader",options:{plugins:["@babel/plugin-transform-arrow-functions","@babel/plugin-transform-block-scoping"]}}]}]}
}
- 通过预设
const path = require("path");
module.exports = {mode:"development",devtool: "source-map",entry:"./src/main.js",output:{filename:"bundle.js",path: path.resolve(__dirname,"./dist")},module:{rules:[{test:/\.js$/,exclude:/node_modules/,use:[{loader:"babel-loader",options:{"presets":["@babel/preset-env"]// plugins:[// "@babel/plugin-transform-arrow-functions",// "@babel/plugin-transform-block-scoping"// ]}}]}]}
}
使用多个preset:
"presets":[["@babel/preset-env",{useBuiltIns:"usage",corejs:3.8}],["@babel/preset-react"],["@babel/preset-typescript"]]
什么是polyfill
polyfill
: 填充材料,,填充物,,可以理解成补丁,,主要是为了给在旧版本浏览器不支持的js新特性加补丁,,poilyfill是一种代码实现,,他提供了现代JavaScript特性的“模拟实现”,,当目标环境不支持该特性时,,polyfill会为其提供一个实现,让旧的浏览器支持这些新特性,,,比如Promise
,Symbol
等
Babel提供的polyfill插件:@babel/plugin-transform-runtime
在使用@babel/preset-env
时,可以配置polyfill来提供支持,,需要配置useBuiltIns
,这个useBuiltIns 有三个属性:
- false : 打包后的文件不使用polyfill来配置
- usage :会根据源代码中的语言特性,自动检测所需要的polyfill,,,, 这样可以让最终包里面的polyfill最小化,
- entry : 这个会根据browserlist目标 导入所有的polyfill,包会变大
"presets":[["@babel/preset-env",{useBuiltIns:"usage",corejs:3.8}]]
babel编译器执行过程
源代码 ===》 词法分析(Lexical Analyse) ===> 将词法分析的每个词变成tokens ==》token :
{type:类型,value:值}
. ===> 语法分析 ===>>
不同语言进行不同的翻译 ===》 抽象语法树 AST ===〉 遍历这个树(traversal) ===》 访问节点值(visitor) ===> 将每一个节点通过插件进行转换 ===〉 变成新的AST ===》 AST转换成目标代码
babel的配置文件
babel的配置也可以写到一个独立的文件,,
babel.config.json
.babelrc.json
rc: run commands. 或者。run configuration的缩写
名词
- 魔法注释: 浏览器会处理的注释,,类似:打包之后的js引入source-map一样
- 多包管理 : 比如element-plus ,,每一个组件都是一个包,都有自己的入口文件,有
package.json
相关文章:

webpack03
什么是source-map 将代码编译压缩之后,,可以通过source-map映射会原来的代码,,,在调试的时候可以准确找到原代码报错位置,,,进行修改 source-map有很多值: eval &#…...

组会 | SNN 的 BPTT(backpropagation through time)
目录 1 神经学基础知识1.1 神经元1.2 神经元之间的连接1.3 膜电位1.4 去极化与超极化 2 SNN2.1 LIF 模型2.2 BPTT 中存在的问题2.3 梯度爆炸或消失问题 前言: 本博仅为组会总结,如有谬误,请不吝指正!虽然标题为 BPTT&am…...

CDA数据分析师一级经典错题知识点总结(3)
1、SEMMA 的基本思想是从样本数据开始,通过统计分析与可视化技术,发现并转换最有价值的预测变量,根据变量进行构建模型,并检验模型的可用性和准确性。【强调探索性】 2、CRISP-DM模型Cross Industry Standard Process of Data Mi…...

django基于Python的电影推荐系统
Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序,旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息(如类型…...

JVM与Java体系结构
一、前言: Java语言和JVM简介: Java是目前最为广泛的软件开发平台之一。 JVM:跨语言的平台 随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。 Java虚拟机根本不关心运行在其内部的程序到底是使用何…...

网络授时笔记
SNTP的全称是Simple Network Time Protocol,意思是简单网络时间协议,用来从网络中获取当前的时间,也可以称为网络授时。项目中会使用LwIP SNTP模块从服务器(pool.ntp.org)获取时间 我们使用sntp例程,sntp例程路径为D:\Espressif\…...

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky
目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position:relative 、absolute、fixed 、sticky (四选一) top:距离上面的像素 bottom:距离底部的像素 left:距离左边的像素…...

spark汇总
目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例(并行化创建)代码示例(读取外部数据)代码示例(读取目录下的所有文件) 算子DAGSparkSQLSparkStreaming…...

【Rust自学】11.5. 在测试中使用Result<T, E>
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.5.1. 测试函数返回值为Result枚举 到目前为止,测试运行失败的原因都是因为触发了panic,但可以导致测试失败的…...

Sping Boot教程之五十四:Spring Boot Kafka 生产者示例
Spring Boot Kafka 生产者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…...

设计模式-结构型-组合模式
1. 什么是组合模式? 组合模式(Composite Pattern) 是一种结构型设计模式,它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说,组合模式允…...

基于Java的推箱子游戏设计与实现
基于Java的推箱子游戏设计与实现 摘 要 社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有…...
Spark vs Flink分布式数据处理框架的全面对比与应用场景解析
1. 引言 1.1 什么是分布式数据处理框架 随着数据量的快速增长,传统的单机处理方式已经无法满足现代数据处理需求。分布式数据处理框架应运而生,它通过将数据分片分布到多台服务器上并行处理,提高了任务的处理速度和效率。 分布式数据处理框…...
python_excel列表单元格字符合并、填充、复制操作
读取指定sheet页,根据规则合并指定列,填充特定字符,删除多余的列,每行复制四次,最后写入新的文件中。 import pandas as pd""" 读取指定sheet页,根据规则合并指定列,填充特定字…...

nums[:]数组切片
问题:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 使用代码如下没有办法通过测试示例,必须将最后一行代码改成 nums[:]nums[-k:]nums[:-k]切片形式: 原因:列表的切片操作 …...
【Arthas 】Can not find Arthas under local: /root/.arthas/lib 解决办法
报错 [INFO] JAVA_HOME: /opt/java/openjdk [INFO] arthas-boot version: 4.0.4 [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. [1]: 12 org.springframework.boot.loader.JarLauncher 1 [ER…...

录用率23%!CCF推荐-B类,Early Access即可被SCI数据库收录,中美作者占比过半
International Journal of Human-Computer Interaction(IJHCI)创刊于1989年,由泰勒-弗朗西斯(Taylor & Francis, Inc.)出版,主要发表关于交互式计算(认知和人体工程学)、数字无障…...

IP 地址与蜜罐技术
基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…...

Vue_API文档
Vue API风格 Vue 的组件可以按两种不同的风格书写:选项式 API(Vue2) 和组合式 API(Vue3) 大部分的核心概念在这两种风格之间都是通用的。熟悉了一种风格以后,你也能够很快地理解另一种风格 选项式API(Opt…...
WebSocket 设计思路
WebSocket 设计思路 1. 核心结构体 1.1 Manager (管理器) // Manager 负责管理所有WebSocket连接 type Manager struct {clients sync.Map // 存储所有客户端连接broadcast chan []byte // 广播消息通道messages chan Message // 消息处理通道config *config.WebSo…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...