babel与AST

本文介绍如何使用Babel初始化项目,并详细解释了Babel如何通过AST(抽象语法树)将现代JavaScript代码转换为ES5。讨论了为何使用AST,展示了将`let`转换为`var`的过程,探讨了循环依赖的概念及其静态分析。涉及的工具有@babel/core、@babel/parser、@babel/generator等。
摘要由CSDN通过智能技术生成

初始化项目

mkdir webpack-study
cd webpack-study
yarn init -y

此时在package.json里面加入以下依赖

{
   
  "name": "01",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
   
    "@babel/core": "7.12.3",
    "@babel/generator": "7.12.5",
    "@babel/parser": "7.12.5",
    "@babel/preset-env": "7.12.1",
    "@babel/traverse": "7.12.5",
    "ts-node": "9.0.0",
    "typescript": "4.0.5"
  },
  "devDependencies": {
   
    "@types/babel__core": "7.1.12",
    "@types/babel__generator": "7.6.2",
    "@types/babel__parser": "7.1.1",
    "@types/babel__preset-env": "7.9.1",
    "@types/babel__traverse": "7.0.15",
    "@types/node": "14.14.6"
  }
}

babel以及项目依赖

image_34f26524.png对使用到的包进行说明 详细内容请参考: 理解babel的基本原理和使用方法

  • @babel/core Babel 是一个 JavaScript 编译器, Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是 Babel 能为你做的事情:
  1. 语法转换
  2. 通过 Polyfill 方式在目标环境中添加缺失的特性(通过第三方 polyfill 模块,例如 core-js,实现)
  3. 源码转换 (codemods)
  • @babel/generator

    这个过程已经在上面的实例中有所展现,使用的插件是@babel/generator,其作用就是将转换好的ast重新生成代码。这样的代码就就可以安全的在浏览器运行。

  • @babel/parser

    在babel中编译器插件是@babel/parser,其作用就是将源码转换为AST,

  • @babel/preset-env (预设(preset)——babel的插件套装)

    那么问题来了新语法新特性那么多,难道我们要挨个去加吗?当然不是,babel已经预设了几套插件,将最新的语法进行转换,可以使用在不同的环境中,如下:

@babel/preset-env
@babel/preset-flow
@babel/preset-react
@babel/preset-typescript

从名字上就能看出他们使用的环境了,需要注意的是env,他的作用是将最新js转换为es6代码。预设是babel插件的组合,我们可以看下package.json(截取一部分):

image_e686d254.png image.png

  • @babel/traverse

ast进行遍历parse

  • ts-node 使用.d.ts文件 既然要开发一个项目,显然不会只有这些代码。肯定要用到内建模块和第三方模块。然而,直接导入模块,在.ts文件中是不行的。例如:

image_81a0cd22.png这是由于typescript自身的机制,需要一份xx.d.ts声明文件,来说明模块对外公开的方法和属性的类型以及内容。感觉有一些麻烦。好在,官方以及社区已经准备好了方案,来解决这个问题。

在TypeScript 2.0以上的版本,获取类型声明文件只需要使用npm。在项目目录下执行安装:

npm install --save-dev @types/node

就可以获得有关node.js v6.x的API的类型说明文件。之后,就可以顺利的导入需要的模块了:

import * as http from 'http';

小试牛刀

我们安装好依赖之后,编写以下代码

touch var_to_let.ts
import {
    parse 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值