babel理解

前言:随着ES6和ES7标准的出现,JavaScript语言标注引入了大量的新语言和新的API,无疑这些新的特性给我前端开发带来了极大的便利,但是很不幸的是目前只有相对较新的浏览器才支持这些特性,如果我们想在低版本浏览器使用这些的新的语法和API,就需要一个工具来将它解析成低版本浏览器能识别的语法,于是babel就诞生了!

1.如何编译

babel工作时会去项目根目录下寻找.babelrc或者babel.config.js配置文件,根据配置文件里的配置信息来对js语法进行编译。

配置格式如下

{
  "presets": [
    ["env", { "modules": false }],
    "stage-2"
  ],
  "plugins": ["transform-runtime"]
}

presets :预设

babel通过插件来告诉它如何编译和要编译那些js语言,比如我们想要编译let关键字,就需要引入let相关的插件,要编译箭头函数,就要引入箭头函数相关的插件,由于一个一个引入配置比较麻烦,babel官方就这些常用的插件封装成了一组plugin集合,这样我们就只需配置一次了。

{
  "plugins": [
    "check-es2015-constants",
    "es2015-arrow-functions",
    "es2015-block-scoped-functions",
    // ...
  ]
}

引入babel-preset-env之后,只需配置一行

{
    "presets":["env"]
}

plugins:有一些插件在presets集合里没有包含,这时候我们还得通过插件来配置

比如:bable-polyfill与babel-runtime

Babel默认只转换新的javascript语法,而不转换新的API,比如 Iterator, Generator, Set, Maps, Proxy, Reflect,Symbol,Promise 等全局对象。以及一些在全局对象上的方法(比如 Object.assign)都不会转码。比如说,ES6在Array对象上新增了Array.form方法,Babel就不会转码这个方法,如果想让这个方法运行,必须使用 babel-polyfill来转换等。babel-polyfill与babel-runtime就是为了解决这些新的API的

比较:

babel-polyfill:当前运行环境不支持新的API时,babel-polyfill向全局对象或内置对象的原型上添加属性来实现,缺点是可能造成全局变量的污染。

babel-runtime:它是将es6编译成es5去执行。我们使用es6的语法来编写,最终会通过babel-runtime编译成es5.也就是说,不管浏览器是否支持ES6,只要是ES6的语法,它都会进行转码成ES5.所以就有很多冗余的代码。这时我们就是通过import来按需导入需要兼容的API,但是如果我现在有100个文件甚至更多的话,难道我们需要一个个文件加import Promise from 'babel-runtime/core-js/promise' 吗?那这样肯定是不行的,因此这个时候出来一个 叫 babel-plugin-transform-runtime。

babel-plugin-transform-runtime:babel-plugin-transform-runtime会自动帮我们polyfill当前环境不支持的API,不需要我们一个一个去导入,polyfill包就在在babel-runtime这个包里。

配置项:

helpers: 默认值为true,表示是否开启内联的babel helpers(即babel或者环境本来存在的某些对象方法函数)如:extends,etc这样的
在调用模块名字时将被替换名字。

polyfill:默认值为true,表示是否把内置的东西(Promise, Set, Map)等转换成非全局污染的。

regenerator:默认值为true,是否开启generator函数转换成使用regenerator runtime来避免污染全局域。

moduleName:默认值为 babel-runtime,当调用辅助 设置模块(module)名字/路径.

presets中的配置项:

modules:将ES6模块语法转换为另一种模块类型。将该设置为false就不会转换模块。默认为 'commonjs'.

在webpack中设置为false,,因为webpack已经帮我们做了这件事。

 

QST QMC5883L —— 经典磁传感器的生存指南与替代预案 本文聚焦于QST旗下经典三轴磁力计 QMC5883L,解析其技术渊源、核心特性及当前面临的停产风险。结合真实应用场景提供续命方案与选型建议,为依赖该芯片的开发团队争取过渡时间窗口期。文章包含实测数据对比、生命周期管理策略及潜在替代方案拆解。存续价值判断✔️ 现有产品设计无需大幅改动即可延续生命;❌ 新项目采用将面临更高的维护成本;⚠️ 建议在6个月内完成技术路线切换。#磁传感器 #嵌入式开发 #供应链管理 #QST #QMC5883L。 阅读详情

相关推荐

车载测试工程师必备:5分钟搞定CANoe台架搭建(附DBC导入技巧)

本文为车载测试工程师提供快速搭建CANoe测试台架的实用指南,涵盖硬件连接、DBC文件导入及常见报错解决方案。通过详细步骤和高效技巧,帮助工程师在5分钟内完成台架搭建,提升车载测试效率,特别适合紧急功能验证场景。

potato的博客 812

对babel的理解

文章目录前言一、工作原理二、babel的包构成1.核心包2.功能包3.工具包babel官网的一些总结 前言 初识babel,是在webpack打包里面的babel-loader里面,作用是将es6转译成es5。 webpack,babel,loader之间的关系: babel 是编译工具,把js高级语言转换成浏览器能识别的js语言。 webpack 是打包工具,定义入口文件,将所有模块引入整理后,通过 loader 和 plugin 处理后,打包输出。 loader让webpack也能够去处理那些非js文件

qq_40409143的博客 1245

手把手教你用STM32F429+FreeRTOS搭建开源SIP电话(附代码与避坑指南)

本文详细介绍了如何使用STM32F429和FreeRTOS搭建开源SIP电话系统,涵盖硬件选型、FreeRTOS任务划分、PJSIP协议栈移植、音频系统优化及安全实践。通过实战案例和代码示例,帮助开发者快速实现嵌入式VoIP通信,特别适合物联网和音视频通信领域的应用开发。

weixin_33582311的博客 355

ES6的新API使用babel-polyfill来解决

Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise、Async等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。 举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法...

💻 Code:TypeScript / Engineering 🤖 AI:Prompt Optimization / Context Memory / Coding Agents 7483

restbed编译笔记

Restbed 可以构建出基于asio库的restfulAPI服务,Restbed 4.7版本使用了1.12.0版本的asio(其他版本编译不通过),可直接访问github下载:https://github.com/chriskohlhoff/asio/tree/asio-1-12-0。另外Restbed还依赖openssl库(可直接下载exe的安装包,安装后取出lib库及头文件放到到restbed\dependency\openssl中即可,https://slproweb.com/download/W.

mahong100的博客 2106

【OpenCV3】cv::compare()使用详解

cv::compare()主要用于两个图像之间进行逐像素的比较,并输出比较的结果。具体用法如下: cv::compare() bool cv::compare( cv::InputArray src1, // 输入数组1 cv::InputArray src2, // 输入数组2 cv::OutputArray dst, // 输出数组 int cmpop // 比较操作子,见下表 ...

guduruyu的专栏 9759

babelrc 和 babel.config.js区别

babelrc 只会影响本项目中的代码 babel.config.js会影响整个项目中的代码,包含node_modules中的代码 推荐使用babel.config.js babelrc { "plugins": [ [ "@ks/babel-plugin-component", { "libraryName": "@ks/sharp-ui", "sty..

simple5960的博客 1375

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

《Webpack 报错》Note: The code generator has deoptimised the styling of as it exceeds the max of 500KB

《Webpack 报错》Note: The code generator has deoptimised the styling of as it exceeds the max of 500KB

前端技术 4466

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 754

【即插即用模块】卷积篇 | TCSVT 2025 | MFACB:多尺度膨胀融合,快速扩大感受野,多尺度特征精准捕捉!

本文提出了一种新型多尺度融合膨胀卷积模块MFACB,用于增强语义分割任务中的特征表达能力。该模块通过三分支串联膨胀卷积结构快速扩大感受野,采用双路径融合机制(基础信息路径+多尺度信息路径)实现高效上下文聚合。相比传统卷积块,MFACB在保持轻量化的同时显著提升了多尺度特征捕捉能力,实验表明其性能优于基础残差块。该模块支持自定义膨胀率和步长调整,可灵活嵌入不同网络阶段,适用于需要特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 310

babel-polyfill

babel-polyfill Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。 举例来说,ES6在Array对象上新增了Array.from方法。Babe...

weixin_30552635的博客 435

智能 Agent 跨模态决策机制实战:多源数据融合与感知驱动行为策略设计

随着智能 Agent 应用从结构化文本处理拓展至图像识别、语音交互、传感器响应等多模态环境,其决策机制也面临从单模态语言理解向“多源感知驱动行为选择”的系统跃迁。本文聚焦跨模态输入下的 Agent 决策体系,系统性解析多源数据建模、感知融合方式、模态对齐机制、输入权重控制策略与策略引擎适配路径,进一步结合多模态提示构建、模态感知异常检测、模态优先级路由调度等工程问题进行实战拆解。通过企业级智能客服、制造车间控制、智慧医疗助手等典型案例,本文提供面向真实场景的跨模态 Agent 架构与多输入决策融合方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1353

babel原理_【JavaScript】深入理解Babel原理及其使用

前言半年前也写过一篇babel的简单使用文章,当时看了下babel的文档,但是很多地方还不理解,所以文章里没有怎么说道babel的一些关键概念,只是机械的描述如何使用(配合webstorm)。最近刚好遇到一个问题,发现是因为js代码中使用的es6的新api没有被转义,导致抛异常了。查找了下资料,是没有引入polyfill所致,之前一直对babel的这些概念没有很好的理解,把这个bug作为引子,认真...

weixin_42398171的博客 703

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

理解 Babel 插件

http://web.jobbole.com/88236/ 前言 相信目前常与 ES6 代码打交道的同学对 Babel 应该不会陌生,在 ES6 代码被编译转化为 ES5 代码的过程中,Babel 插件显得尤为重要,我们最后经由 Babel 生成的代码取决于插件在这一层中做了什么事,在探索这其中的过程之前,我们先来了解下一些所需的基础知识。 抽象语法树 Babel 的工

monica12的专栏 588

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

babel 的理解

Babel是一个 JavaScript 编译器,准确说是一个source-to-source编译器,通常称为“ transpiler”。这意味着您向 Babel 提供一些 JavaScript 代码,Babel 修改代码,并返回生成新代码。 babel在编译时候,会把源代码分为两部分来处理:语法syntax、api。 语法syntax比如const、let、模版字符串、扩展运算符等。 api比如Array.includes()等新函数。 @babel/core babel编译器。被拆分三个模块:@babel

前端精髓 1096

对 babel polyfill 的一些理解

前言为了支持业务中少量的es6+的高级特性,最近在研究了一下babel的垫片,现将此整理为文字,如下。babel 和 babel ployfill 的关系1、先来理解下 babel 到底...

前端开发博客 1998

理解Babel是如何工作的

Babel 是用于编写下一代 JavaScript 的transpiler (转译器)。Babel 是以将 ES5+ 代码转译成可在任何浏览器中运行的向后兼容的 JavaScript 版本而闻名。因此,学习如何使用 Babel 以编程方式修改 JavaScript 代码是有必要的。 转译器概念和流程 转译器也称为源到源编译器。它们是读取以一种编程语言编写的源代码并以另一种语言生成等效代码的工具。转译器使 TypeScript 和 CoffeeScript 等语言得以存在,这是 JavaScript...

薛定谔的猫-前端领域 814

babel import语法 js_Babel 的理解

由于 markdown 排版问题建议从掘金阅读:https://juejin.cn/post/6902323049513615374目录前言babel 是什么babel 能做什么工作流程解析 Parse转换 Transform生成 Generator使用方式babel-standalone介绍版本示例问答补充cli 命令介绍安装使用问答作为构建工具的插件模块介绍babel-node版本升级问答总结...

weixin_31849265的博客 1199

babel的一些简单的理解

背景 一直知道babel是转换es6高级语法的,一些es6中的新语法在低版本浏览器中不能解析,导致语句报错。例如vue项目在ie中运行,简直是头大。。。但是遇到问题时候不会解决,不知道应该怎么配置,现在了解了一下 我是针对babel6理解的,babel7项目中现在没有用,所以没去看呢还 配合webpack的使用 package.json中使用babel webpack中的配置 module.exports = { chainWebpack: config => { config.modu

qq_39183005的博客 236

babel原理_深入理解Babel原理及其使用

前言半年前也写过一篇babel的简单使用文章,当时看了下babel的文档,但是很多地方还不理解,所以文章里没有怎么说道babel的一些关键概念,只是机械的描述如何使用(配合webstorm)。最近刚好遇到一个问题,发现是因为js代码中使用的es6的新api没有被转义,导致抛异常了。查找了下资料,是没有引入polyfill所致,之前一直对babel的这些概念没有很好的理解,把这个bug作为引子,认真...

weixin_39631301的博客 266

理解babel

在利用webpack开展项目的时候,涉及到babel对es6的转换,一直对里面的原理比较模糊,抽个时间整理一下,还是先来了解几个概念。 js编译(编译器) 我们所写的JavaScript代码,在被js引擎运行之前有一个编译的阶段,转化为内部可执行的代码,主要包括三个阶段。 词法分析+分词(tokenizing):把所写的js代码进行检查,形成词法作用域,得到词法单元 语法分析(parsin...

currygolden的博客 379

理解Babel

本文参考链接:https://mp.weixin.qq.com/s/C-WmM5tjfc3r4sB52C4R0Q 一、用途:Babel能够转译ES5+的代码,使它在浏览器里面能运行 二、抽象语法树:AST(节点上有type属性,还有若干描述信息对属性) 三、Babel工作过程: 1、Parse(解析):将源代码转换成更加抽象的表示方法(AST) (1)词法分析:对代码进行“分词”,变成一个Tokens数组 ...

麦子 229

Babel工具理解

Babel 是什么   最简单直白的说法是Babel 是一个编译器, 一个将es6+(等)其他更高级的javascript语法编译到指定版本(主要是一些比较老的浏览器所支持的版本)的js语法的 js -> js编译器 怎样使用Babel 浏览器端   体验Babel最简单的方式就是通过在<script>标签中直接使用babel-standalone了, 该软件包取代了已经过时的babel-browser包 <script type="text/babel"> // so

weixin_40085040的博客 458

由 Babel 理解前端编译原理

大厂技术坚持周更精选好文背景我们知道编程语言主要分为「编译型语言」和「解释型语言」,编译型语言是在代码运行前编译器将编程语言转换成机器语言,运行时不需要重新翻译,直接使用编译的结果就行了。而解释型语言也是需要将编程语言转换成机器语言,但是是在运行时转换的。通常我们都将 JavaScript 归类为「解释型语言」,以至于很多人都误以为前端代码是不需要编译的,但其实 ...

趣谈前端 865

babel 个人理解

babel 总结 个人看了网上很多写babel的文章,都写的如何使用,关于babel为什么这样使用,为什么babel  有插件,presets,ployfill 并未说明   出现的背景: 由于JavaScript 的标准在不断的更新,出现新的语法(就是新的写法,比如箭头函数),新的对象,原有对象新增属性,新增的api 。但是javascript的各种执行环节只实现了部分的特性(浏览器:ch...

wasdxie的博客 383

理解babel的基本原理和使用方法

  babel是一个编译器,用于将ECMA2015+代码转换为向后兼容的javascript语法,其原因在于目前浏览器并不能及时的兼容js的新语法,而开发过程中我们往往会选择es6、jsx、typescript进行开发,而浏览器并不能识别并执行这些代码,因此就必须将这些代码编译并转换成浏览器识别的代码,所以我们才会发现所有的项目构建工具都是使用babel,这就显示出来babel的重要性。...

weixin_43378716的博客 3013
上一篇: CentOS安装nginx服务器
下一篇: vscode相关配置
feral_coder
博客等级 码龄9年 19粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值