Webpack的基本使用 - babel

news2025/6/7 14:00:03

Mode配置

Mode配置选项可以告知Webpack使用相应模式的内置优化

默认值是production(什么都不设置的情况下)

可选值有:'none' | 'development' | 'production';

这几个选项有什么区别呢?

认识source-map

我们的代码通常运行在浏览器上时可以打包压缩

真实跑在浏览器上的代码和我们编写的代码有差异

ES6的代码可能被转成ES5

对应的代码行号和列号在经过编译后肯定不一致

代码进行丑化压缩时会将编码名称等修改

使用TypeScript编写的代码最终转成JS

原始源的时候,调试转换后的代码(打包后的代码)是很困难的

因为我们不能保证代码不出错

如何调试转换后不一致的代码呢?

就是用source-map

source-map是从已经转换的代码到原始的源文件

使浏览器可以重构原始源并且在调试器中显示重建的原始源

如何使用source-map

第一步:根据源文件,生成source-map文件,webpack在打包时,可以通过配置生成source-map

const path = require('path');

module.exports = {
    mode:'development',
    entry:'./src/index.js', 
    devtool:'source-map',
    output:{
       path:path.resolve(__dirname,'./build'),
       filename:"bundle.js"
    },
}

第二步:在转换后的代码最后添加一个注释,它指向sourcemap

浏览器会根据我们的注释查找相应的source-map,根据source-map还原代码方便进行调试

在Chrome中可以按照下面的方式打开source-map

最初source-map生成的文件大小是原始文件的十倍,第二版减少了百分之五十,第三版又减少了百分之五十

目前一个133kb的文件,最终的source-map的大小在300kb

目前的source-map长什么样

version:当前使用的版本,也是最新的第三版

sources:从哪些文件转换过来的source-map和打包的代码(最初始的文件)

names:转换前的变量和属性名称

mapping:source-map用来和源文件映射的信息,一串base64 VLQ编码

file:打包后的文件(浏览器加载的文件)

sourceContent:转换前的具体代码信息(和source是对应关系)

sourceRoot:所有的sources相对的根目录

devtool可以设置二十六个值

选择不同的值生成的source-map会略有差异,打包的过程也会有性能的差异,可以根据不同的情况进行选择

为什么需要babel

想要用ES6和TypeScript就得会babel

 babel可以作为独立的工具来使用

安装:

 npm install @babel/core @babel/cli -D

安装个插件: 

npm install @babel/plugin-transform-block-scoping -D

使用插件:

npx babel ./src --out-dir ./build --plugins=@babel/plugin-transform-block-scoping
//const定义常量(ES6)
const message = 'Hello World';
console.log(message);

const foo = ()=>{
    console.log("foo function exec!");
}
foo();

使用完插件文件就发生了转化:

//const定义常量(ES6)
var message = 'Hello World';
console.log(message);
var foo = () => {
  console.log("foo function exec!");
};
foo();

bebel每使用一种转换都要新安装东西和对应的命令也太麻烦了

所以babel给我们提供了preset预设

npm install @babel/preset-env -D

使用预设:

npx babel ./src --out-dir ./build --presets=@babel/preset-env

Babel的底层原理

babel可以看成一个编译器,将源代码转换成浏览器可以直接识别的另一段源代码

babel的工作流程也和编译器一样:

解析阶段

转换阶段

生成阶段

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

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

相关文章

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新:从链上存证到动态赋权 跨链确权架构 全链互操作协议:采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…

为什么HDI叠孔比错孔设计难生产

摘要:本文深入探讨了HDI(高密度互连)技术中叠孔与错孔设计在生产难度上的差异。通过对两种设计在对位精度、制程复杂性、可靠性挑战等方面进行详细分析,阐述了叠孔设计在生产过程中面临的一系列难题,旨在为HDI产品的设…

数据分析实战2(Tableau)

1、Tableau功能 数据赋能(让业务一线也可以轻松使用最新数据) 分析师可以直接将数据看板发布到线上自动更新看板自由下载数据线上修改图表邮箱发送数据设置数据预警 数据探索(通过统计分析和数据可视化,从数据发现问题&#xf…

游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程

案例背景 关于Gearbox: Gearbox 是一家美国电子游戏公司,总部位于德克萨斯州弗里斯科,靠近达拉斯。Gearbox 成立于1999年,推出过多款史上最具代表性的视频游戏,包括《半衰期》、《战火兄弟连》以及《无主之地》。 团队…

Linux --TCP协议实现简单的网络通信(中英翻译)

一、什么是TCP协议 1.1 、TCP是传输层的协议,TCP需要连接,TCP是一种可靠性传输协议,TCP是面向字节流的传输协议; 二、TCPserver端的搭建 2.1、我们最终好实现的效果是 客户端在任何时候都能连接到服务端,然后向服务…

LlamaIndex 工作流简介以及基础工作流

什么是工作流? 工作流是一种由事件驱动、基于步骤的应用程序执行流程控制方式。 你的应用程序被划分为多个称为“步骤(Steps)”的部分,这些步骤由“事件(Events)”触发,并且它们自身也会发出事…

如何利用Elastic Stack(ELK)进行安全日志分析

在以下文章中,我将解释如何使用Elastic Stack(ELK)进行安全日志分析,以提高安全性和监控网络活动。ELK是一个功能强大的开源日志管理和分析平台,由Elasticsearch、Logstash和Kibana组成,适用于各种用例&…

创客匠人:以 AI 利器赋能创始人 IP 打造,加速知识变现新路径

在知识付费与个人 IP 崛起的时代,创客匠人作为行业领先的技术服务商,正通过 AI 工具重构创始人 IP 打造与知识变现的生态。其推出的三大 AI 利器 ——AI 销售信、免训数字人、AI 智能客服,精准解决 IP 运营中的核心痛点。 以 AI 销售信为例&…

Opencv中的copyto函数

一.OpenCV中copyto函数详解 copyto()是 OpenCV 中用于图像复制和融合的核心函数,支持灵活的数据复制和掩模(Mask)操作,其功能和使用方法如下: 1. 核心功能 基础复制:将源图像&…

基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究

在大数据时代,网络数据的采集与分析变得至关重要,分布式爬虫作为高效获取海量数据的工具,被广泛应用于各类场景。然而,传统的爬虫调度策略在面对复杂多变的网络环境和动态的抓取需求时,往往存在效率低下、资源浪费等问…

在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)

在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven) Jenkins 是一款开源的持续集成和持续交付(CI/CD)工具,在 DevOps 实践中有着广泛的应用。本文将手把手带你在 Ubuntu 24.04 LTS 系统中完成 Jenkins 的安装,并配置所需的全局工具:Git、JDK 和 Maven…

防爆型断链保护器的应用场景有哪些?

​ ​防爆型断链保护器是一种用于防止链条断裂导致设备损坏或安全事故的装置,尤其适用于存在爆炸风险的工业环境。以下是其主要应用场景: ​ ​1.石油化工行业 在石油化工厂、炼油厂等场所,防爆型断链保护器可用于保护输送设备&#xf…

OPenCV CUDA模块光流------高效地执行光流估计的类BroxOpticalFlow

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::BroxOpticalFlow 是 OpenCV CUDA 模块中实现Brox光流算法的类。该类用于在 GPU 上高效地计算两帧图像之间的稠密光流(Dens…

K8S认证|CKS题库+答案| 3. 默认网络策略

目录 3. 默认网络策略 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、官网找模板 3)、按照题目要求创建networkpolicy 4)、应用networkpolicy 5)、检查策略 3. 默认网络策略…

Linux编程:1、文件编程

一、Linux 文件编程与 C 语言文件编程的区别 特性C 语言 I/O 库函数Linux 文件编程(系统调用)实现层面用户空间(glibc 库)内核空间(系统调用)跨平台性跨平台(Windows/Linux)仅限 Li…

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 电子联锁

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 电子联锁

【Spark征服之路-2.3-Spark运行架构】

运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor …

Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab

Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab 1. 环境准备2. API 网关--HTTP2.1 部署应用2.2 部署网关2.3 HTTP路径匹配2.4 HTTP头匹配 3. API网关--HTTPS3.1 创建TLS证书和私钥3.2 部署HTTPS网关3.3 HTTPS请求测试 4. API网关--TLS 路由4.1 部署应用4.2 部署网关…

Java转Go日记(六十):gin其他常用知识

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同时将日志写入…

89.实现添加收藏的功能的后端实现

实现完查看收藏列表之后,实现的是添加收藏的功能 我的设想是:在对话界面中,如果用户认为AI的回答非常好,可以通过点击该回答对应的气泡中的图标,对该内容进行添加 所以后端实现为: service类中添加&…