babel执行流程

3 篇文章 0 订阅

babel简单执行流程

为了验证方便 这边 使用的命令是 babel src/index.js --out-file lib/index.compiled.js,这样可以定位 babel 中的files.js 相对目录比较简单

执行scripts 中的 build 命令

执行 package.json 中的scripts 命令

 <!-- package.json 中的命令 -->
 "scripts": {
    "build":"babel src/index.js --out-file index.compiled.js"
  }

  <!-- 或者终端执行 -->
  npx babel src/index.js --out-file index.compiled.js

执行流程:
babel执行流程

  • normalizeFile:主要是通过 @babel/parser解析 源数据 code,通过词法分析、语法分析生成 ast
  • transformFile:主要是通过 @babel/traverse 以及插件的 visitors 深度遍历ast 并 转化相应代码
  • generateCode:主要是通过 @babel/generator 传入遍历后的ast,生成新的ast 以及 sourceMap

以下是简单代码转化演示 const -> var

const { parse } = require("@babel/parser");
const  traverse = require("@babel/traverse");
const generator = require("@babel/generator")

const code ="const a = 'this is a const mark'"
// 词法分析、 语法分析 并返回ast
const parseAst = parse(code,{tokens:true})
console.log("parseAst:",parseAst)

// Babel Traverse(遍历)模块维护了整棵树的状态,并且负责替换、移除和添加节点。
// 官网连接 https://babeljs.io/docs/babel-traverse
traverse.default(parseAst,{VariableDeclaration:{
  enter(path){
    path.node.kind='var'
  }
}})


// @babel/generator 生成ast 
const { code:generatorCode } = generator.default(parseAst)

console.log("generatorCode:",generatorCode)

// 打印结果是
var a = 'this is a const mark'

以下是使用插件 转化箭头函数的代码演示

const babel = require("@babel/core");
const { code } = babel.transformSync("let number = x => x", {
  plugins: [
    "@babel/plugin-transform-arrow-functions",
    "@babel/plugin-transform-function-name",
    "@babel/plugin-transform-block-scoping"
  ],
});

// 结果
var number = function number(x) {
  return x;
}
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值