Webpack的基本使用 - babel

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.pswp.cn/pingmian/83759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83759.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「基于連續小波變換(CWT)和卷積神經網絡(CNN)的心律失常分類算法——ECG信號處理-第十五課」2025年6月6日

一、引言 心律失常是心血管疾病的重要表現形式,其準確分類對臨床診斷具有關鍵意義。傳統的心律失常分類方法主要依賴于人工特征提取和經典機器學習算法,但這些方法往往受限于特征選擇的主觀性和模型的泛化能力。 隨著深度學習技術的發展,基于…

C++.OpenGL (11/64)材質(Materials)

材質(Materials) 真實感材質系統 #mermaid-svg-NjBjrmlcpHupHCFQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NjBjrmlcpHupHCFQ .error-icon{fill:#552222;}#mermaid-svg-NjBjrmlcpHupHCFQ .error-text{fill:…

P1345 [USACO5.4] 奶牛的電信Telecowmunication

P1345 [USACO5.4] 奶牛的電信Telecowmunication 突然發現 USACO 好喜歡玩諧音梗。 題意就是給定一個無向圖,問你要刪多少點才能使 s , t s,t s,t 不連通。 注意是刪點而不是刪邊,所以不能直接使用最小割來求。所以考慮變換一下題目模型。 經典 tric…

EXCEL如何快速批量給兩字姓名中間加空格

EXCEL如何快速批量給姓名中間加空格 優點:不會導致排版混亂 缺點:無法輸出在原有單元格上,若需要保留原始數據,可將公式結果復制后“選擇性粘貼為值” 使用場景:在EXCEL中想要快速批量給兩字姓名中間加入空格使姓名對…

使用vtk8.2.0加載dicom圖像

1 上一篇文章我們已經編譯好了VTK的dll,下面我們就來加載他。 2 在Pro里面加載dll #------------------------------------------------- # # Project created by QtCreator 2024-02-04T14:39:07 # #-------------------------------------------------QT …

使用vsftpd搭建FTP服務器(TLS/SSL顯式加密)

安裝vsftpd服務 使用vsftpd RPM安裝包安裝即可,如果可以訪問YUM鏡像源,通過dnf或者yum工具更加方便。 yum -y install vsftpd 啟動vsftpd、查看服務狀態 systemctl enable vsftpd systemctl start vsftpd systemctl status vsftpd 備份配置文件并進…

鴻蒙OSUniApp集成WebGL:打造跨平臺3D視覺盛宴#三方框架 #Uniapp

UniApp集成WebGL:打造跨平臺3D視覺盛宴 在移動應用開發日新月異的今天,3D視覺效果已經成為提升用戶體驗的重要手段。本文將深入探討如何在UniApp中集成WebGL技術,實現炫酷的3D特效,并特別關注鴻蒙系統(HarmonyOS)的適配與優化。 …

前端文件下載常用方式詳解

在前端開發中,實現文件下載是常見的需求。根據不同的場景,我們可以選擇不同的方法來實現文件流的下載。本文介紹三種常用的文件下載方式: 使用 axios 發送 JSON 請求下載文件流使用 axios 發送 FormData 請求下載文件流使用原生 form 表單提…

MacOS解決局域網“沒有到達主機的路由 no route to host“

可能原因:MacOS 15新增了"本地網絡"訪問權限,在 APP 第一次嘗試訪問本地網絡的時候會請求權限,可能順手選擇了關閉。 解決辦法:給想要訪問本地網絡的 APP (例如 terminal、Navicat、Ftp)添加訪問…

中英文實習證明模板:一鍵生成標準化實習證明,助力實習生職場發展

中英文實習證明模板:一鍵生成標準化實習證明,助力實習生職場發展 【下載地址】中英文實習證明模板 這份中英文實習證明模板專為實習生設計,內容簡潔專業,適用于多種場景。模板采用中英文對照格式,方便國際交流與使用。…

RocketMQ運行架構和消息模型

運?架構 nameServer 命名服務 NameServer 是 RocketMQ 的 輕量級注冊中心,負責管理集群的路由信息(Broker 地址、Topic 隊列分布等),其核心作用是解耦 Broker 與客戶端,實現動態服務發現。broker 核?服務 RocketMQ最…

C++學習-入門到精通【11】輸入/輸出流的深入剖析

C學習-入門到精通【11】輸入/輸出流的深入剖析 目錄 C學習-入門到精通【11】輸入/輸出流的深入剖析一、流1.傳統流和標準流2.iostream庫的頭文件3.輸入/輸出流的類的對象 二、輸出流1.char* 變量的輸出2.使用成員函數put進行字符輸出 三、輸入流1.get和getline成員函數2.istrea…

OpenCV 圖像像素的邏輯操作

一、知識點 1、圖像像素的邏輯操作,指的是位操作bitwise,與、或、非、異或等。 2、位操作簡介: 位1 位2 與and 或or 異或xor0 0 0 0 00 1 0 1 11 0 0 …

【AAOS】【源碼分析】用戶管理(二)-- 整體架構

整體介紹 Android多用戶功能作為 Android Automotive 的重要組成部分,為不同駕駛員和乘客提供了一個更加定制化、隱私保護的使用環境。Android 多用戶的存在,它可以讓多個用戶使用同一臺設備,同時保持彼此的數據、應用和設置分隔開來。 各用戶類型的權限 能力SystemAdminS…

Redis最佳實踐——電商應用的性能監控與告警體系設計詳解

Redis 在電商應用的性能監控與告警體系設計 一、原子級監控指標深度拆解 1. 內存維度監控 核心指標: # 實時內存組成分析(單位字節) used_memory: 物理內存總量 used_memory_dataset: 數據集占用量 used_memory_overhead: 管理開銷內存 us…

多模態大語言模型arxiv論文略讀(109)

Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文標題:Math-PUMA: Progressive Upward Multimodal Alignment to Enhance Mathematical Reasoning ?? 論文作者:Wenwen Zhuang, Xin Huang, Xiantao Z…

web3-以太坊智能合約基礎(理解智能合約Solidity)

以太坊智能合約基礎(理解智能合約/Solidity) 無需編程經驗,也可以幫助你了解Solidity獨特的部分;如果本身就有相應的編程經驗如java,python等那么學起來也會非常的輕松 一、Solidity和EVM字節碼 實際上以太坊鏈上儲存…

D2-基于本地Ollama模型的多輪問答系統

本程序是一個基于 Gradio 和 Ollama API 構建的支持多輪對話的寫作助手。相較于上一版本,本版本新增了對話歷史記錄、Token 計數、參數調節和清空對話功能,顯著提升了用戶體驗和交互靈活性。 程序通過抽象基類 LLMAgent 實現模塊化設計,當前…

傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(2)--選定Python環境 安裝rasa并初始化工程

此篇接續上一篇 傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(1)--項目背景即學習初衷 1、Python 環境版本的選擇 我主機上默認的Python環境是3.12.3 (我喜歡保持使用最新版本的工具或框架,當初裝python時最新的穩定版本就是…

Ubuntu22.04安裝MinkowskiEngine

MinkowskiEngine簡介 Minkowski引擎是一個用于稀疏張量的自動微分庫。它支持所有標準神經網絡層,例如對稀疏張量的卷積、池化和廣播操作。 MinkowskiEngine安裝 官方源碼鏈接:GitHub - NVIDIA/MinkowskiEngine: Minkowski Engine is an auto-diff neu…