编程知识 cdmana.com

简单介绍下各种 JavaScript 解析器

作者:沧海

各种js解析器是前端工程化的基石,可以说如果没有它,很多工程化都无法正常执行,我们每天用到的babel、webpack、eslint、TypeScript背后都需要一套对应的js解析器,今天我们来看看,目前市场上有哪些常用的解析器,他们各自又拥有什么特性尼?

前言

在说js解析器前,我们需要先了解下ESTree这个项目,这个项目的初衷通过社区的力量,保证和es规范的一致性,通过自定义的语法结构来表述JavaScript的AST,后来随着知名度越来越高,多位知名工程师的参与,使得变成了事实意义上的规范,目前这个库是Mozilla和社区一起维护的。

如果没有AST规范,那么也就意味着根本无法造出对应的解析器,而如果AST规范不统一,一些相应的工具库就不能很好的互通有无,比如webpack就无法正常的使用babel相关插件。

正是因为EsTree的定义的规范,所以现在所有的js解析器或者编译器,基本上都绕不开它,如果你有志于自己写一个js解析器,那它的文档你一定需要读一遍。

一。知名的JS解析器

1.1 uglify-js (11.2k*)

创作时间:2010-8-1
作品地址:https://github.com/mishoo/UglifyJS
作者介绍:Mihai Bazon,Lisp程序员,Emacs爱好者,貌似是罗马尼亚人
作者博客:

  • https://github.com/mishoo
  • uglify-js可以通过--acorn或者--spidermonkey指定对应的parsing

    1.2 Esprima (6k*)

    创作时间:2011-11-20
    作品地址:https://github.com/jquery/esprima
    作者介绍:ariya印尼人,在德国获得博士学位,目前住在硅谷山景城,创建了世界上第一个真正的无头Web浏览器PhantomJS。也为WebKit, KDE, 和 Qt贡献过很多代码
    作者博客:

    • https://ariya.io/about
    • https://github.com/ariya

    这是第一个用JavaScript编写的符合EsTree规范的JavaScript的解析器,后续多个编译器都是受它的影响,个人觉得它的出现具有历史意义。

    1.3 acorn (6.8k*)

    创作时间:2012-9-23
    作品地址:https://github.com/acornjs/acorn
    作者介绍:Marijn Haverbeke,同时也是富文本编辑器prosemirror(4.8k)、浏览器代码编辑器CodeMirror(21.7k)的作者,另外他还出版了一本书《Eloquent JavaScript》,并且这本书在网上也有https://eloquentjavascript.net/,目前国内也翻译了这本书,不过只有第二版《JavaScript编程精解》,也有人目前居住在德国柏林。
    作者博客:

    • https://marijnhaverbeke.nl/
    • https://github.com/marijnh

    acorn和Esprima很类似,输出的ast都是符合EsTree规范的,目前webpack的AST解析器用的就是acorn,和Esprima一样,也是也不直接支持JSX

    需要提一下的是,acorn的es6语法支持RReverser贡献了大半[2]

    1.4 @babel/parser(babylon)

    创作时间:2012-9-23
    作品地址:https://github.com/babel/babel/tree/master/packages/babel-parser

    babel官方的解析器,最初fork于acorn,后来完全走向了自己的道路,从babylon改名之后,其构建的插件体系非常强大。

    1.5 espree (1.3k*)

    创作时间:2014-11-30
    作品地址:https://github.com/eslint/espree
    作者:Nicholas C. Zakas,多本js书籍,其中《红宝书 第三版》最为知名,eslint也是他创建的,在2016年被查出莱姆病,目前已经很长时间没有工作了,如果有兴趣的话,可以去github上面捐赠他,捐赠页面链接。
    作者博客:

    • https://github.com/nzakas
    • https://humanwhocodes.com/

    eslint、prettier的默认解析器,最初fork于Esprima的一个分支(v1.2.2),后来因为ES6的快速发展,但Esprima短时间内又不支持,后面就基于acorn开发了。

    1.5 TypeScript

    创作时间:2014-7-6
    作品地址:https://github.com/microsoft/TypeScript/tree/master/src/compiler
    作者:这个是microsoft的Anders Hejlsberg领导创建的,他也是是C#、Delphi、Turbo Pascal的作者

    现在很多大型项目,首选就是TypeScript,它的解析器是.........

版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4839818

Scroll to Top