babel核心知識點

Babel 是一個 JavaScript 編譯器,主要用于將 ECMAScript 2015+ 版本的代碼轉換為向后兼容的 JavaScript 代碼,以便在舊版本的瀏覽器或環境中運行。以下是 Babel 的核心知識點:

1. 基本概念

  • 編譯器:Babel 本質上是一個編譯器,它遵循編譯器的一般流程,即解析(Parsing)、轉換(Transformation)和生成(Code Generation)。
    • 解析:將源代碼轉換為抽象語法樹(AST)。
    • 轉換:對 AST 進行修改,例如將新的語法特性轉換為舊版本支持的語法。
    • 生成:根據修改后的 AST 生成新的代碼。
  • 插件(Plugins):Babel 的功能通過插件來實現。插件是對 AST 進行轉換的函數,每個插件負責處理特定的語法轉換。例如,@babel/plugin-transform-arrow-functions 插件可以將箭頭函數轉換為普通函數。
  • 預設(Presets):預設是一組插件的集合,用于方便地管理和配置多個插件。例如,@babel/preset-env 是一個常用的預設,它根據目標環境自動確定需要使用的插件。

2. 配置文件

Babel 可以通過配置文件來指定使用的插件和預設。常見的配置文件有 .babelrcbabel.config.js 等。

.babelrc 示例
{"presets": ["@babel/preset-env"],"plugins": ["@babel/plugin-transform-arrow-functions"]
}
babel.config.js 示例
module.exports = {presets: [["@babel/preset-env",{targets: {browsers: ["last 2 versions", "ie >= 11"]}}]],plugins: ["@babel/plugin-transform-arrow-functions"]
};

3. 常用預設

  • @babel/preset-env:根據目標環境自動確定需要使用的插件。可以通過 targets 選項指定目標瀏覽器或環境,例如 { "browsers": ["last 2 versions", "ie >= 11"] } 表示支持每個瀏覽器的最后兩個版本以及 IE 11 及以上版本。
  • @babel/preset-react:用于處理 React 代碼,包括 JSX 和 React 特定的語法。
  • @babel/preset-typescript:用于處理 TypeScript 代碼,將 TypeScript 代碼轉換為 JavaScript 代碼。

4. 常用插件

  • @babel/plugin-transform-arrow-functions:將箭頭函數轉換為普通函數。
// 轉換前
const add = (a, b) => a + b;// 轉換后
var add = function add(a, b) {return a + b;
};
  • @babel/plugin-transform-classes:將 ES6 類轉換為 ES5 構造函數和原型方法。
// 轉換前
class Person {constructor(name) {this.name = name;}sayHello() {console.log(`Hello, ${this.name}`);}
}// 轉換后
var Person = function () {function Person(name) {this.name = name;}Person.prototype.sayHello = function () {console.log('Hello, ' + this.name);};return Person;
}();
  • @babel/plugin-proposal-object-rest-spread:支持對象的擴展運算符和剩余參數。
// 轉換前
const { a, ...rest } = { a: 1, b: 2, c: 3 };
const newObj = { ...rest, d: 4 };// 轉換后
var _objectWithoutProperties = function (obj, keys) {var target = {};for (var i in obj) {if (keys.indexOf(i) >= 0) continue;if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;target[i] = obj[i];}return target;
};
var a = _ref.a,rest = _objectWithoutProperties(_ref, ['a']);
var newObj = Object.assign({}, rest, { d: 4 });

5. 插件開發

Babel 插件本質上是一個函數,它接收一個 babel 對象作為參數,并返回一個包含 visitor 屬性的對象。visitor 是一個對象,包含了對 AST 節點進行處理的方法。

以下是一個簡單的 Babel 插件示例,用于將所有的字符串字面量轉換為大寫:

module.exports = function (babel) {const { types: t } = babel;return {visitor: {StringLiteral(path) {const newNode = t.stringLiteral(path.node.value.toUpperCase());path.replaceWith(newNode);}}};
};

6. 與構建工具集成

Babel 通常與構建工具(如 Webpack、Rollup 等)集成,以便在構建過程中自動進行代碼轉換。

Webpack 集成示例
const path = require('path');module.exports = {entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.js'},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}}]}
};

通過以上核心知識點,你可以了解 Babel 的基本原理、配置方法、常用插件和預設,以及如何開發自己的插件和與構建工具集成。

作用介紹

Babel有了解過嗎,請說說 Babe1的高的使用和原理?
了解過
bebeL用來作什么的?
,將高版本(ESHA) 3S 轉為低版本16
將 Typescript 轉為j5
-降級處理。polyfiLl,vita esbuild.roLlup
taro早期,就是使用 bobet將nerV、Peact,遇法轉為小程序
<di→diew
自己想要的語法支持,options chatn2.

基礎使用

babel、webpack,都有兩種使用途徑:1.命令行、2.node 環境下的api
@babel/cLi
插件化機制實現、預設
@babel./plugin-transfore-arrow-functiona
@babel/plugin-transfora-instanceof
但是,為了給開發者足夠的便捷,b8581 又在插件的基鎖上封裝了一層,預設
-@babel/preset-env

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78625.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78625.shtml

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

相關文章

javaScript--數據結構和算法

在 JavaScript 里&#xff0c;數據結構和算法是十分關鍵的部分&#xff0c;下面介紹幾種常見的數據結構和對應的算法。 數組&#xff08;Array&#xff09; 數組是最基礎的數據結構&#xff0c;用于存儲一系列有序的數據。 // 創建數組 const arr [1, 2, 3, 4, 5];// 訪問元素…

π0.5:帶開放世界泛化的視覺-語言-動作模型

25年4月來自具身機器人創業公司 PI 公司的論文“π0.5: a Vision-Language-Action Model with Open-World Generalization”。 為了使機器人發揮作用&#xff0c;它們必須在實驗室之外的現實世界中執行實際相關的任務。雖然視覺-語言-動作 (VLA) 模型在端到端機器人控制方面已…

使用 OpenCV 和 dlib 進行人臉檢測

文章目錄 1. 什么是 dlib2. 前期準備介紹2.1 環境準備2.2 dlib 的人臉檢測器 3. 代碼實現3.1 導入庫3.2 加載檢測器3.3 讀取并調整圖像大小3.4 檢測人臉3.5 繪制檢測框3.6 顯示結果 4. 完整代碼5. 優化與改進5.1 提高檢測率5.2 處理 BGR 與 RGB 問題 6. 總結 人臉檢測是計算機視…

spring 的PropertySource 類與 @PropertySource 注解詳解與對比

PropertySource 類與 PropertySource 注解詳解與對比 在這里插入圖片描述 一、PropertySource 類詳解 1. 類型與作用 類型&#xff1a;接口&#xff08;org.springframework.core.env.PropertySource&#xff09;作用&#xff1a;抽象配置數據源&#xff0c;提供統一的鍵值…

Java后端開發day37--源碼解析:TreeMap可變參數--集合工具類:Collections

&#xff08;以下內容全部來自上述課程&#xff09; 1. TreeMap 1.1 須知 1.1.1 Entry 節點初始為黑色&#xff1a;提高代碼閱讀性 1.1.2 TreeMap中的成員變量 comparator&#xff1a;比較規則root&#xff1a;紅黑樹根節點的地址值size&#xff1a;集合的長度和紅黑樹…

基于Playwright的瀏覽器自動化MCP服務

一、服務定位與核心功能 github.com/executeautomation/mcp-playwright 是一個基于 Playwright&#xff08;微軟開源的跨瀏覽器自動化測試框架&#xff09;的 Model Context Protocol (MCP) 服務&#xff0c;核心功能是將瀏覽器自動化能力集成到大語言模型&#xff08;LLM&…

OSPF網絡協議

OSPF&#xff08;Open Shortest Path First&#xff09;是一種鏈路狀態路由協議&#xff0c;屬于IGP&#xff08;內部網關協議&#xff09;&#xff0c;用于在單一自治系統&#xff08;AS&#xff09;內動態分發路由信息。它通過計算最短路徑&#xff08;基于Dijkstra算法&…

Ubuntu 22.04.4操作系統初始化詳細配置

上一章節&#xff0c;主要講解了Ubuntu 22.04.4操作系統的安裝&#xff0c;但是在實際生產環境中&#xff0c;需要對Ubuntu操作系統初始化&#xff0c;從而提高系統的性能和穩定性。 一、查看Ubuntu系統版本和內核版本 # 查看系統版本 testubuntu:~$ sudo lsb_release -a Rel…

【Linux應用】開發板快速上手:鏡像燒錄、串口shell、外設掛載、WiFi配置、SSH連接、文件交互(RADXA ZERO 3為例)

【Linux應用】開發板快速上手&#xff1a;鏡像燒錄、串口shell、外設掛載、WiFi配置、SSH連接、文件交互&#xff08;RADXA ZERO 3為例&#xff09; 參考&#xff1a; ZERO 3 | Radxa Docs 大部分的Linux開發板等設備都大同小異 如樹莓派、香橙派、STM32MP135的Linux開發板等 …

Redis使用總結

NoSQL 1.1為什么要用NoSQL 面對現在用戶數據的急劇上升&#xff0c;我們需要對這些用戶數據進行挖掘&#xff0c;傳統的關系型數據庫已經不適合這些 應用了.Nosql 的發展可以很了的處理這些大的數據. 1.2什么是NoSQL Not Only Sql->NoSQL(不僅僅是SQL) 非關系型數據庫.隨…

Unity ML-Agents + VScode 環境搭建 Windows

安裝Unity 先去官網下載Unity Hub&#xff0c;然后安裝在D盤就可以了&#xff0c;你需要手機上安裝一個Unity Connect進行賬號注冊。 詳細的注冊可以參考&#xff1a; https://blog.csdn.net/Dugege007/article/details/128472571 注冊好了以后登入電腦端的Unity Hub&#x…

Linux電源管理(2)_常規的電源管理的基本概念和軟件架構

原文&#xff1a; Linux電源管理(2)_Generic PM之基本概念和軟件架構 1. 前言 Linux系統中那些常規的電源管理手段&#xff0c;包括關機&#xff08;Power off&#xff09;、待機&#xff08;Standby or Hibernate&#xff09;、重啟&#xff08;Reboot&#xff09;等。這些…

機器學習基礎理論 - 分類問題評估指標

幾個定義:混淆矩陣 TP: True Positives, 表示實際為正例且被分類器判定為正例的樣本數FP: False Positives, 表示實際為負例且被分類器判定為正例的樣本數FN: False Negatives, 表示實際為正例但被分類器判定為負例的樣本數TN: True Negatives, 表示實際為負例且被分類…

在線教育系統開發常見問題及解決方案:源碼部署到運營維護

當下&#xff0c;越來越多的教育機構、企業培訓部門以及創業者&#xff0c;選擇開發屬于自己的在線教育系統。然而&#xff0c;從源碼部署到實際運營&#xff0c;整個過程中常常會遇到一系列技術與管理難題。今天&#xff0c;筆者將從在線教育系統源碼維護、運營等幾個方向為大…

RAG(Retrieval-Augmented Generation,檢索增強生成)

RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;是一種結合 信息檢索 和 文本生成 的技術&#xff0c;旨在提升大語言模型&#xff08;LLM&#xff09;生成內容的準確性和時效性。其核心思想是&#xff1a;先檢索相關知識&#xff0c;再基…

項目實戰 -- 狀態管理

redux基礎 還記得好久好久之前就想要實現的一個功能嗎&#xff1f; 收起側邊欄折疊菜單&#xff0c;沒錯&#xff0c;現在才實現 因為不是父子通信&#xff0c;所以處理起來相對麻煩一點 可以使用狀態樹或者中間人模式 這就需要會redux了 Redux工作流&#xff1a; 異步就…

Go語言之路————指針、結構體、方法

Go語言之路————指針、結構體、方法 前言指針結構體聲明初始化使用組合引用結構體和指針結構體的標簽 方法例子結合結構體總結 前言 我是一名多年Java開發人員&#xff0c;因為工作需要現在要學習go語言&#xff0c;Go語言之路是一個系列&#xff0c;記錄著我從0開始接觸Go…

[創業之路-390]:人力資源 - 社會性生命系統的解構與重構:人的角色嬗變與組織進化論

前言&#xff1a; 人、財、物、信息、機制、流程、制度、方法共同組合了一個持續的消耗資源、持續的價值創造、持續面臨生存與發展、遺傳與變異的社會性生命系統。 "人"是所有社會性生命系統最最基礎性的要素&#xff0c;它彌漫在系統中多維立體空間的不同節點上&am…

JS執行器在UI自動化測試中的應用

前言 在進行UI自動化過程會遇到滾動條下拉、隱藏元素定位、只讀屬性元素的編輯、富文本處理等&#xff0c;此時可以使用JS執行器簡化我們的一些處理操作。 具體應用 JS執行器的使用步驟&#xff1a; 1.先寫個JS腳本&#xff0c;如果需要獲取操作后的值&#xff0c;JS腳本前面…

解析Suna:全球首款開源通用AI智能體

導語&#xff1a; 嘿&#xff0c;哥們兒&#xff0c;最近 AI Agent 這塊兒挺火的&#xff0c;有個叫 Suna 的開源項目冒出來挺快&#xff01;聽說只用了 3 周就開發出來了&#xff0c;但功能上感覺已經能跟那個商業版的 Manus掰掰手腕了。它能幫你搞定瀏覽器自動化、管文件、爬…