首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Babel是如何读懂JS代码的

编者按:本文转载自安秦的知乎文章 概述 本文不再介绍Babel是什么也不讲怎么用,这类文章很多,我也不觉得自己能写得更好。...这篇文章的关注点是另一个方面,也是很多人会好奇的事情,Babel的工作原理是什么。...Babel工作的三个阶段 首先要说明的是,现在前端流行用的WebPack或其他同类工程化工具会将源文件组合起来,这部分并不是Babel完成的,是这些打包工具自己实现的,Babel的功能非常纯粹,以字符串的形式将源代码传给它...那么回到代码的解析当中,JS代码有哪些语法单元呢?...大致有以下这些(其他语言也许类似但通常都有区别): 空白:JS中连续的空格、换行、缩进等这些如果不在字符串里,就没有任何实际逻辑意义,所以把连续的空白符直接组合在一起作为一个语法单元。

1.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

babel-preset-react_babel-loader

不同的浏览器会有不同的javascript解释器,js就由这些解释器引擎翻译和运行。由于js被internet界广泛接受,应用越来越多,随后就有了规范组织用于管理js语言本身的规范。...js所遵循的sepec就称为ecmascript或者ES 其中的第5版被称为ES5.你可以将ES5想象为js语言本身的一个版本,该版本在2009年定稿,目前主流浏览器全部实现了ES5....作为js的未来,我们希望直接在今天就开始使用ES6/ES7,但是我们也希望我们的代码能够在目前的主流浏览器中能够正确地运行,这就是Babel为什么能够产生地原因。...(除了babel, typescript也可以实现类似地功能)babel允许我们完全以ES6/ES7规范来写js代码,同时编译成es5地代码,以便最终可以在当前并未实现es6规范的浏览器上运行 使用babel...<script src="https://cdnjs.cloudflare.com/ajax/libs/<em>babel</em>-standalone/6.18.1/<em>babel</em>.min.<em>js</em>" ></script

33320

精读《用 Babel 创造自定义 JS 语法》

所以我们的目的并不是像文章标题说的 - 创造一个自定义 JS 语法,因为你创造的语法只会让 JS 复杂体系更加混乱,但可以让你理解 Babel 解析标准 JS 语法的原理,以及看待新语法提案时,拥有从实现层面思考的能力...首先我们通过修改 babel 源码的方式实现的效果,是可以转化为自定义 babel parser 插件的: // babel-plugin-transformation-curry-function.js...3 精读 读完这篇文章,相信你不仅对 babel 插件有了更深刻的认识,而且还掌握了如何为 js 添加新语法这种黑魔法。...不论是 Babel 插件的使用、还是 Babel 增加自定义 JS 语法,都要具备基本编译原理知识。编译原理知识还能帮助你开发在线编辑器,做智能语法提示等等。...4 总结 《用 Babel 创造自定义 JS 语法》这篇文章虽然说的是 babel 相关知识,但可以从中提取到许多通用知识,这就是现在还去理解 babel 的原因。

47210

Webstorm配置babel将.js文件转换为es5

前言 最近编写工具站(Laravel + Vue.js【是引用.js文件,不是前端vue.js后端laravel】)的时候,写js的时候,是在不想写es5语法,比如写var,Webstorm提醒使用let...而node.js中可以使用babel将es6语法转换为es5语法。所以我就想能不能利用babel,将单个.js文件的语法转换为es5?经过一番实践,成功了。...输入 babel -h 查看帮助,没报错误,就是成功啦。 ? 我准备了 一个regular.js文件,里面有es6语法。 ?...好了,在命令行里面输入: babel regular.js --presets env --out-file reg.js 编译regular.js 到文件reg.js , 用的预设规则是env 【前面安装的...没报错,就成功啦~ 查看reg.js文件: ? 的确是es5语法了。 webstorm配置 新建Babel ? 如下图 ?

2.5K00

玩转Babel

意思是说你为 Babel 提供一些 JavaScript 代码,Babel 更改这些代码,然后返回给你新生成的代码。图片Babel 是一个将高级语法转成低级语法的工具。...这个过程是在发布之前就完成,js引擎解析运行的是转化后的代码。...Babel 主要用来做以下几件事情:转换语法(例如jsx)目标环境中缺少的 Polyfill 功能(例如core-js)源代码转换 (codemods)Babel的处理流程从代码的输入到最终输出结果,Babel...console.log('-----------------------'); console.log('转换后:', result.code);})准备工作做完了,剩下的就是要新建一个plugin.js...对于Babel的理解以及插件的编写也都是冰山一角,希望能为大家起到抛砖引玉的作用。参考资料:Babel插件手册Babel官方文档Babel 原理与演进

62441

babel入门基础

背景 babel的官网说babel是下一代的js语法编译器,现在自己也在很多项目中使用了babel,可是自己对babel的认识呢,只停留在从google和别人项目中copy的配置代码上,内心感到很不安...babel常用配置 通常在前端或node项目中,进行以下配置: 入口文件app.babel.js里面配置: // babel require('babel-core/register')({ presets.../app.js'); .babelrc文件中的设置: { "presets": ["es2015", "stage-0"] } babel基础概念 1.babel-core   新的js语法之前是不存在的...,需要将js代码分析抽象的语法树 ,方便各个插件分析语法进行相应的处理成低版本的js;  2.babel-register    改写了require命令,会对.js、jsx、.es、es6 后缀的模块都会先转码...自从babel升级到6.x之后,babel的插件都是可以插拔的,只有设置了相应的插件,babel才能知道如何处理js代码。

85050

Babel】1145- 非常不错的 Babel 插件开发教程

当然AST不是JS特有的,每个语言的代码都能转换成对应的AST, 并且AST结构的规范也有很多, js里所使用的规范大部分是 estree[1] ,当然这个只做简单了解即可。...// babel.config.js module.exports = { plugins: [ // 填写我们的plugin的js 文件地址 ['..../babel-plugin-myplugin.js', { log: { // 导入方式为 named kind: 'named', require...: 'log4js' } }] ] } 复制代码 起步 好,知道了具体要做什么事情并且设计好了参数的规则, 我们就可以开始动手了。...自动引入 第一条完成了,那需求的第二条,我们使用的包如何自动引入呢, 如上面案例使用的 log4js, 那么我们处理后的代码就应该自动加上: import { log } from 'log4js' 复制代码

82220

babel操作AST

前一篇文章讲解了什么是AST,但是没有说明如何操作AST,下面来讲解下如何使用babel来操作AST,首先看一下流程图: image.png babel操作AST的流程如上图,首先将js代码转化为AST...语法树,然后利用一些特定的库去修改AST语法树,然后得到新的语法树,将新的语法树转化为js代码,这样就可以转化js代码了。...其中 @babel/core 是 babel 的核心库,用来实现核心转换引擎,babel-types 类型判断,用于生成AST零部件。...a + b } 这里我们需要用到 babel 中的 transform 方法,它可以将 js 代码转换成 AST ,过程中可以通过使用 plugins 对 AST 进行改造,最终生成新的 AST 和...js 代码,其整个过程用网上一个比较贴切的图就是: image.png 我们需要使用babel的transform方法,使用方法如下: //transform方法转换code //babel先将代码转换成

1.5K52
领券