Babel 参考手册
工具 | instruction
babylon
Babylon 是 Babel 中使用的 JavaScript 解析器。
- 默认启用最新的 ECMAScript 版本(ES2017)。
- 附加注释。
- 支持 JSX, Flow, Typescript 语法。
- 支持实验阶段的语法提案(支持至少达到 stage-0 阶段的 PR)。
鸣谢
该项目中使用了大量的 acorn 和 acorn-jsx 语法,感谢 @RReverser 和 @marijnh 出色的工作。
API
babylon.parse(code, [options])
babylon.parseExpression(code, [options])
parse()
将提供的 code
解析为完整的 ECMAScript 程序,而 parseExpression()
试图解析表达式,并会考虑性能问题。如果有疑问,请使用 .parse()
。
选项
-
allowImportExportEverywhere: 默认情况下,
import
和export
声明只能出现在代码头部。设置该选项为true
时,则允许他们在代码的任何地方使用。 -
allowReturnOutsideFunction: 默认情况下,顶级的 return 语句会引发错误。设置该选项为
true
时,则会接受错误的代码。 - allowSuperOutsideMethod: TODO
-
sourceType: 表明代码应该解析的模式。可以是
"script"
,"module"
或者"unambiguous"
中任意一个。默认为"script"
。"unambiguous"
将使得 Babylon 尝试根据 ES6 的import
或者export
声明来进行推测。具有 ES6import
和export
的文件被认为是"module"
,否则被认为是"script"
。 - sourceFilename: 将输出的 AST 节点与其源文件名相关联。多用于多个输入文件的 AST 生成代码和 source map 时。
- startLine: 默认情况下,解析的第一行代码被视为第 1 行。你可以提供一个行号来作为起始。多用于与其他源工具集成。
- plugins: 数组,包含要启用的插件。
- strictMode: TODO
-
ranges: 为每个节点添加
ranges
属性:[node.start, node.end]
-
tokens: 将所有解析的 token 添加到
File
节点的上的tokens
属性中。
输出
Babylon 根据 Babel AST 的格式 生成 AST 。它基于 ESTree 规范,具有以下差别:
现在可以使用
estree
插件来取消掉这些差别
- 文字符号会被替换为字符串,数字,布尔,Null,正则表达式
- 属性符号会被替换为 ObjectProperty 和 ObjectMethod
- 方法定义会被替换为类方法
-
指令和语法块的
directives
字段中包含额外的指令和指令字符集 - 函数表达式中的类方法,对象属性和对象方法值属性的属性被强制/带入主方法节点。
JSX 的 AST 代码基于 Facebook JSX AST 并额外添加了一个节点类型:
JSXText
Semver
Babylon 在大多数情况下遵循 semver。唯一需要注意的是,某些规范遵从性错误的修复可能会在下一个补丁版本中发布。
例如:我们推送了修复早期错误的代码,就像#107 - 多个文件默认导出多个。这被视为一个错误进行修复,即时它会导致构建失败。
案例
require("babylon").parse("code", {
// 以严格模式解析并允许模块声明
sourceType: "module",
plugins: [
// 启用 jsx 和 flow 语法
"jsx",
"flow"
]
});
插件
estree
jsx
flow
doExpressions
objectRestSpread
-
decorators
(基于过时版本的 Decorators 提案。将在Babylon
的未来版本中删除。) classProperties
exportExtensions
asyncGenerators
functionBind
functionSent
dynamicImport
templateInvalidEscapes