Babel Intro Babel - 01 Introduction

news/2025/11/7 7:20:08/文章来源: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,一经查实,立即删除!

相关文章

Windows下同时使用多网卡时的跃点数修改

Windows下同时使用多网卡时的跃点数修改Windows下同时使用多网卡时的跃点数修改 https://blog.csdn.net/2301_78023415/article/details/132268337 配置网卡IP,网关,DNS,跃点(优先级) https://blog.csdn.net/qq_52735254/article/details/135035941网站:http://shibowl.top…

HL集训日记

2025.1.16 六个半小时高铁... 打了后缀数组板子,一遍过了,然后写了几个水题,又活了一天。。。

第一章 对程序员来说CPU是什么

热身问答 1.程序是什么? Q:指示计算机每一步的动作和指令 2.程序是由什么组成的? Q:指令和数据 3.什么是机器语言? Q:CPU可以直接识别并使用的语言 4.正在运行的程序存储在什么位置? Q:内存 5.什么是内存地址? Q:内存中,用来表示命令和数据存储位置的数值 6.计算机的…

unordered_map-STL容器

时间复杂度和空间复杂度

2 应用层

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

1.16 约束.数据库设计.多表查询

1.约束非空约束: 关键字是 NOT NULL 保证列中所有的数据不能有null值。 唯一约束:关键字是 UNIQUE 保证列中所有数据各不相同。 主键约束: 关键字是 PRIMARY KEY 非空且唯一。 默认约束: 关键字是 DEFAULT 未指定值则采用默认值。 外键约束: 关键字是 FOREIGN KEY 练习 根…

含有风浪流模型的水面船舶三自由度的MATLAB运动仿真

含有风浪流模型的水面船舶三自由度的MATLAB运动仿真 文件列表 F_current1.m , 1873 F_feng1.m , 6457 F_lang1.m , 2255 Main1.m , 3271 force1.m , 383

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

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