zoukankan      html  css  js  c++  java
  • 对Babel的研究1

    @babel/parser

    Babel解析器(以前是Babylon)是Babel中使用的JavaScript解析器

    • 默认情况下启用了最新的ECMAScript版本(ES2017)。
    • 评论附件。
    • 支持JSX,Flow,Typescript。
    • 支持实验语言建议(至少在阶段0接受任何PR )。

    学分

    由于@RReverser@marijnh的出色工作,因此很大程度上基于acornacorn- jsx

    API

    babelParser.parse(code, [options])

    babelParser.parseExpression(code, [options])

    parse()将提供的内容解析code为整个ECMAScript程序,同时 parseExpression()尝试解析单个Expression并考虑性能。如有疑问,请使用.parse()

    选件

    • allowImportExportEverywhere:默认情况下,importexport 声明只能出现在一个节目的顶尖水平。将此选项设置为true允许它们在允许语句的任何位置。

    • allowAwaitOutsideFunction:默认情况下,await仅允许在异步函数内部使用,或者在topLevelAwait启用插件后在模块的顶级范围内使用。将其设置为true在脚本的顶级范围内也接受它。

    • allowReturnOutsideFunction:默认情况下,顶层的return语句会引发错误。设置true为接受这样的代码。

    • allowSuperOutsideMethod:默认情况下,super不允许在类和对象方法之外使用。设置true为接受这样的代码。

    • allowUndeclaredExports:默认情况下,导出在当前模块作用域中未声明的标识符将引发错误。尽管ECMAScript模块规范要求此行为,但是Babel的解析器无法在以后可能会插入适当声明的插件管道中预期转换,因此有时设置此选项true以防止解析器过早地抱怨未声明的导出会很重要。稍后添加。

    • createParenthesizedExpressions:默认情况下,解析器extra.parenthesized在表达式节点上设置。当此选项设置为trueParenthesizedExpression都转而创建AST节点。

    • errorRecovery:默认情况下,Babel在发现一些无效代码时总是抛出错误。当此选项设置true为时,它将存储解析错误并尝试继续解析无效的输入文件。生成的AST将具有一个errors表示所有解析错误数组属性。请注意,即使启用此选项,@babel/parser也可能引发不可恢复的错误。

    • plugins:包含要启用的插件的数组。

    • sourceType的:指明模式的代码应解析可以是一个。"script""module""unambiguous"默认为"script""unambiguous"根据ES6 语句的存在使@ babel / parser尝试猜测带有ES6 文件将被考虑,否则为importexportimportexport"module""script"

    • sourceFilename:将输出的AST节点与其源文件名相关联。从多个输入文件的AST生成代码和源映射时很有用。

    • startLine:默认情况下,解析的第一行代码被视为第1行。您可以提供一个行号来替代。与其他源工具集成时很有用。

    • strictMode:默认情况下,仅当存在"use strict";指令或所解析的文件为ECMAScript模块时,ECMAScript代码才会被解析为严格 将此选项设置true为始终以严格模式解析文件。

    • rangeranges向每个节点添加一个属性:[node.start, node.end]

    • 令牌:将所有已解析的令牌添加到节点tokens上的属性中File

    输出量

    Babel解析器根据Babel AST格式生成AST 它基于ESTree规范,但存在以下差异:

    现在有一个estree可以恢复这些偏差插件

    AST for JSX代码基于Facebook JSX AST

    森弗

    在大多数情况下,Babel Parser会遵循semver的规定。唯一需要注意的是,某些符合规范的错误修复程序可能会在补丁程序版本下发布。

    例如:我们将问题修复到#107之类的早期错误-每个文件有多个默认导出。即使会导致构建失败,也可以将其视为错误修复。

    require("@babel/parser").parse("code", { // parse in strict mode and allow module declarations sourceType: "module", plugins: [ // enable jsx and flow syntax "jsx", "flow" ] });

    外挂程式

    名称代码示例
    estree回购 不适用

    语言扩展

    名称代码示例
    flow回购 var a: string = "";
    flowCommentsdocs /*:: type Foo = {...}; */
    jsx回购 <a attr="b">{s}</a>
    typescript回购 var a: string = "";
    v8intrinsic %DebugPrint(foo);

    ECMAScript 建议

    名称代码示例
    asyncGenerators提案 async function*() {}, for await (let a of b) {}
    bigInt提案 100n
    classProperties提案 class A { b = 1; }
    classPrivateProperties提案 class A { #b = 1; }
    classPrivateMethods提案 class A { #c() {} }
    decorators提案
    decorators-legacy
    @a class A {}
    doExpressions提案 var a = do { if (true) { 'hi'; } };
    dynamicImport提案 import('./guy').then(a)
    exportDefaultFrom提案 export v from "mod"
    exportNamespaceFrom提案 export * as ns from "mod"
    functionBind提案 a::b, ::console.log
    functionSent function.sent
    importMeta提案 import.meta.url
    logicalAssignment提案 a &&= b
    nullishCoalescingOperator提案 a ?? b
    numericSeparator提案 1_000_000
    objectRestSpread提案 var a = { b, ...c };
    optionalCatchBinding提案 try {throw 0;} catch{do();}
    optionalChaining提案 a?.b
    partialApplication提案 f(?, a)
    pipelineOperator提案 a |> b
    throwExpressions提案 () => throw new Error("")
    topLevelAwait提案 await promise 在模块中
  • 相关阅读:
    正则表达式进阶——你从没想过的正则表达式使用方式
    bert 预训练模型路径
    Ubuntu 18.04 美化
    循环中存在异步的情况
    SQL truncate 、delete与drop区别
    用express创建网站出现"$ DEBUG=microbog ./bin/www"的提示
    全局安装了express框架,但是无法使用express指令的问题
    jQuery获取textarea中的文本
    js实现查询关键词,使其高亮
    SQL Server常用函数汇总
  • 原文地址:https://www.cnblogs.com/zhouyideboke/p/12220744.html
Copyright © 2011-2022 走看看