简介

babel 学习笔记。

babel 相关插件区别

  • @babel/core: 包含 @babel/parser @babel/traverse @babel/types @babel/template , 不包含 @babel/generator
  • @babel/parser: 可以将 jsx, flow, typescript 转换成 ast
  • @babel/generator: 可以将 AST 转换成 code
  • @babel/traverse: 与 @babel/parser 一起使用,遍历 ast
  • @babel/types: 是一个用于 AST 节点的 Lodash 式工具库,同时也可生成新的 ast 节点
  • @babel/template: 相比 @babel/types,可以基于代码模版创建多 ast 节点

常用语法

ImportDeclaration ( import声明 )

import 'a'

ImportDefaultSpecifier ( import default说明符 )

import a from 'a'

ImportSpecifier ( import说明符 )

import { a } from 'a'

BlockStatement ( 块 )

{}

IfStatement ( if )

if () {}

ForStatement ( for )

for (;;){}

ForInStatement ( for in )

for (a in b) {}

ForOfStatement ( for of )

for (a of b) {}

函数相关

FunctionDeclaration ( 函数声明 )

function a() {}

FunctionExpression ( 函数表达式 )

var a = function() {}

ArrowFunctionExpression ( 箭头函数表达式 )

var a = () => {}

AwaitExpression ( await表达式 )

async function a () { await b() }

ClassDeclaration ( class声明 )

/** 类的内部是 ClassBody-类的内部 */ 
class A {}

变量申明

VariableDeclarator ( 变量声明 )

/** var,const,let用Node中的kind区分 */
var
const
let

Identifier ( 变量名 )

var a

Literal ( 变量值 )

/** NumberLiteral */
var a = 1
/** StringLiteral */
var a = 'a'
/** BooleanLiteral */
var a = true
/** NullLiteral */
var a = null
/** RegExpLiteral */
var a = /\d/g
/** TemplateLiteral */
var a = ``

常用语句

CallExpression ( 函数调用调用表达式 )

/** 上一层是一个 ExpressionStatement-表达式语句 */
a()

NewExpression ( new表达式 )

/** 上一层是一个 ExpressionStatement-表达式语句 */
new A()

AssignmentExpression ( 赋值表达式 )

/** 上一层是一个 ExpressionStatement-表达式语句 */
a = 1

MemberExpression ( 成员表达式 )

/** 上一层是一个 ExpressionStatement-表达式语句 */
a.b

ArrayExpression ( 数组表达式 )

var a = []

ObjectExpression ( 对象表达式 )

/** 这里的 b: 1 是一个 ObjectProperty-对象属性 */
/** 这里的 c() {} 是一个 ObjectMethod-对象函数方法 */
var a = { b: 1, c() {} }

常见 Pattern

AssignmentPattern ( 函数参数 )

/** 函数参数是 AssignmentPattern */
function Hello(name = 'Lily'){}

ArrayPattern ( 数组解构 )

/** 左边是 ArrayPattern 右边是 ArrayExpression */
var [ a, b ] = [ 1, 2 ]

ObjectPattern ( 对象解构 )

/** 左边是 ObjectPattern 右边是 ObjectExpression */
var { a } = { a: 1 }

JSX 相关

SpreadElement ( 扩展运算符 )

/** ...a 为 SpreadElement */
var b = { ...a }
var b = [ ...a ]

RestElement ( 函数参数扩展运算符 )

/** ...a 为 RestElement */
var a = (...a) => a

JSXIdentifier ( jsx 标签名 )

/** div 为 JSXIdentifier */
export default () => <div a={a} {...b}>123</div>;

JSXAttribute ( jsx 普通组件传参 )

/** 其中 {a} 为 JSXAttribute */
export default () => <div a={a} {...b}>123</div>;

JSXSpreadAttribute ( jsx 扩展运算符组件传参 )

/** 其中 {...b} 为 JSXSpreadAttribute  */
export default () => <div a={a} {...b}>123</div>;

JSXExpressionContainer ( jsx 语法表识符 )

/** 其中 {} 为 JSXExpressionContainer */
export default () => <div a={a} {...b}>123</div>;

JSXText ( jsx 内嵌文本 )

/** 其中 123 为 JSXText */
export default () => <div a={a} {...b}>123</div>;

参考文档

powered by Gitbook该文件修订时间: 2023-05-16 18:08:03

results matching ""

    No results matching ""