Babel Intro Babel - 01 Introduction

news/2025/1/16 20:41:36/文章来源:https://www.cnblogs.com/Answer1215/p/18675734

Babel介绍

Babel 是一个编译器,主要用于将最新的 JavaScript 代码转化为向后兼容的代码,以便在老版本的浏览器或环境中运行。

例如,你可能在开发时使用了 ES6、ES7 或者更高级的 JavaScript 特性,但是有些浏览器可能并不支持这些新特性,这时就可以用 Babel 来将代码转化为 ES5 或者更早版本的 JavaScript,以确保代码能在多数浏览器中正常运行。

其次,Babel 更像是一个平台,它本身的核心功能就是解析代码到抽象语法树(AST),然后再将 AST 转回 JavaScript 代码。所有的语法转换(例如将 ES6 转化为 ES5)和功能添加(例如 polyfills)都是通过各种插件来实现的。这一点有点类似于前面我们学习 CSS 工具链时介绍的 PostCSS

16898300520841

Babel 官网:https://babeljs.io/

以下是 Babel 的一些主要功能:

  • 语法转换:将新的 JavaScript 语法(如 JSX,TypeScript,ES2015+ 特性等)转换为旧的 ES5 语法。

  • 源码映射:在编译后的代码中添加源码映射,以方便调试。

  • Polyfills:添加缺失的特性,如 Promise,Symbol 等,这称为 polyfillBabel 提供了一个 Polyfill 功能,能自动引入所需的 Polyfill。这个功能通过 core-js 模块实现(Babel v7.4.0 之前使用的是 @babel/polyfill),可以模拟整个 ES2015+ 环境。

Array.prototype.includes 这个 API 是 ES2016 的新特性,但是一些旧的浏览器是不支持,像这种情况就需要通过 polyfill 天补充缺失的特性,polyfill 就是一段 JS 代码而已,polyfill 这段代码会去检查当前的浏览器是否支持该 API,如果不支持,polyfill 里面提供了该 API 的实现

if(!Array.prototype.includes){Array.prototype.includes = function() {...}
}
  • 插件和预设:Babel 提供了大量的插件支持,你可以通过插件来使用特定的 JavaScript 特性。预设是一组插件的集合,例如,@babel/preset-env 会根据你的环境自动决定需要使用哪些插件。

在前端开发中,Babel 被广泛用于现代 JavaScript 项目,它能确保你的代码能在各种环境中运行,而不需要你手动处理各种浏览器和 JavaScript 版本的兼容性问题。

Babel快速入门

新建一个项目 babel-demo,使用 pnpm init 进行一个初始化,之后安装依赖:

pnpm add --save-dev @babel/core @babel/cli @babel/preset-env
  • @babel/core: 这个是 Babel 的核心包,提供了核心 API
  • @babel/cli:该依赖提供 CLI 命令行工具
  • @babel/preset-env:预设环境,Babel 在做代码转换的时候,是需要依赖插件的,但是会有一种情况,就需要的插件很多。所谓预设,指的就是内置了一组插件,这样我们只需要引入一个预设即可,不需要再挨着挨着引入众多的插件

在 src/index.js 中书写我们的测试代码:

const greet = (name) => `Hello, ${name}!`;
console.log(greet("World"));

接下来在项目的根目录下创建 .babelrc 配置文件,书写如下的配置:

{"presets": ["@babel/preset-env"]
}

该配置就是指定我们的预设是什么。

之后在 package.json 里面添加 script 脚本命令

"scripts": {// ..."babel": "babel src --out-dir lib"
},

编译 src 目录下的文件,输出到 lib 目录下面。

编译结果如下:

"use strict";var greet = function greet(name) {return "Hello, ".concat(name, "!");
};
console.log(greet("World"));

之后我们修改配置文件,指定了浏览器范围:

{"presets": [["@babel/preset-env",{"targets": {"edge": "17","firefox": "60","chrome": "67","safari": "11.1"},"useBuiltIns": "usage","corejs": "3.6.5"}]]
}

这一次编译出来的结果如下:

"use strict";const greet = name => "Hello, ".concat(name, "!");
console.log(greet("World"));

为什么两次不一样呢?原因很简单,第二次我们指定了浏览器版本范围,那么在指定的浏览器版本范围里面的这些浏览器,某一些特性已经支持了,所以就不需要再做转换了。

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

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

相关文章

unordered_map-STL容器

时间复杂度和空间复杂度

2 应用层

2 应用层 2.1 网络应用原理 网络应用:能够运行在不同的端系统和通过网络彼此通信的程序。注:在端系统上运行,而不是在网络核心上运行。网络应用是计算机网络存在的理由。 2.1.1 应用体系结构(application architecture) 客户-服务器体系结构(client-server architecture)…

【内网穿透】概念、原理与实现方法

一、内网穿透简介 内网穿透是一种网络技术,它允许外部网络(如互联网)上的设备访问位于内部网络(例如公司或家庭局域网LAN)中没有直接公网IP地址的设备。这对于远程办公、云服务接入以及物联网设备管理等场景至关重要。 二、工作原理 内网穿透主要依赖于NAT(网络地址转换)…

数字电路课程笔记

1、数制与码制 补零 二进制和十六进制之间的转换: 整数部分:对于整数部分,您需要将二进制数从右往左,每四位一组。如果剩余的位数不足四位,就需要在左边补零,直到每组都有四位。小数部分:对于小数部分,您需要将二进制数从左往右,每四位一组。如果剩余的位数不足四位,…

unity里生成的.csproj和.sln :assembly definition

有一段时间一直没明白为啥有的时候第三方的package里的代码没法引用我们项目的,最近有点心得,记录下: 在创建unity项目的时候默认是创建一个解决方案就是以.sln为结尾的。默认开发时都在同一个解决项目里,所以不会出现相互引用不到的问题。当我们引用到第三方的package时就…

【前端框架】2025 React 状态管理终极指南!

全文约 10800 字,预计阅读需要 30分钟。 React 作为当下最受欢迎的前端框架,在构建复杂且交互丰富的应用时,状态管理无疑是至关重要的一环。从简单的本地状态,到能让多个组件协同工作的全局状态,再到涉及服务器通信、导航切换、表单操作以及持久化存储等不同场景下的状态管…

【搜索】多源BFS专题

跳马(多源BFS变种,每个起点有步数限制)补充几个测试样例 输入 3 2 . . 2 . . .输出 0输入 3 5 4 7 . 4 8 4 7 4 4 . 7 . . . .输出 17输入 3 4 . . . . . 2 . . . . . .输出 0输入 3 4 . . . . . 2 2 . . . . .输出 -1本题很坑爹的地方在于,输入的字符串还用空格分开,所以…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交、142.环形链表II

9-24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:he…

2025 省选模拟 6

2025 省选模拟 6 A.圣诞树 DP,计数题 考虑题目题目的两个限制相邻两层彩球颜色集合不同同层相邻两个彩球颜色不同发现求出每一行恰好 \(j\) 个颜色后第二个限制很简单就解决了。 设 \(f_{i,j}\) 表示长度为 \(i\) 时恰好有 \(j\) 个颜色的方案数(对于一行考虑) 设 \(g_{i,j}…

第一次

第一次 1. 神秘符文的重复序列 逻辑思维#include<bits/stdc++.h> using namespace std; int main(){int n,k;cin>>n>>k;//长度为n,重复k遍!string s;cin>>s;long long int ans=0;long long int cnt=0;while(k--) {//重复k遍for(int i=0;i<n;i++)…

在kubernates中安装安卓模拟器

1.检测环境 root@xx:~# apt install cpu-checker root@xx:~# kvm-ok INFO: /dev/kvm exists KVM acceleration can be used root@xx:~# ll /dev/kvm crw-rw---- 1 root kvm 10, 232 Jan 15 16:38 /dev/kvm确认/dev/kvm设备存在即可。如果是ESXi虚拟机服务器,则需要在虚拟机配置…

告别虚拟机!WSL2安装配置教程!!!

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 由于Linux的系统的稳定以及在环境管理方面的优越性,同时Linux对于ROS系统的独占,很多时候我们都乐意在Linux系统下开发我们机器人的算法,但是由于Windows和Linux系统的存在内核方面的天壤之别,在我们手边…