最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【工程】你所要知道的Babel

    正文概述 掘金(心有l林熙)   2021-05-13   517

    原理浅析

    处理流程

    babel 是一个编译器

    • 解析:将原始代码解析为抽象语法树AST
      • 词法分析:原始代码拆分成一个个的Token
      • 语法分析:递归遍历Tokens数组,构建AST
    • 转换:转换得到的AST,生成新的AST
    • 生成:遍历新AST,生成目标代码

    参考

    • 深入浅出 Babel
    • babel工作原理浅析

    核心概念

    插件

    babel 初始情况不会对代码做任何转换

    借助babel-traverse插件可以遍历AST并进行增删改操作,进而实现代码转换功能

    预设preset

    插件本身可能每一个语法都会有独立的插件来做转换

    babel 抽象出了preset来管理一系列插件

    核心包

    @babel-core

    包括:

    • @babel/parser:负责将源代码解析成AST
    • @babel/traverse:向外提供遍历AST节点的能力
    • @babel/generator:负责根据变换后的AST生成目标代码

    @babel/cli

    提供在命令行中调用@babel/core的能力

    // 依赖安装
    npm i --save-dev @babel/core @babel/cli
    // 没有配置任何插件,编译前后的代码完全一样
    npx babel src --out-dir dist
    

    @babel/preset

    // 依赖安装
    npm i --save-dev @babel/preset
    
    // .babelrc
    {
      "presets": ["@babel/preset-env"]
    }
    

    @babel/polyfill

    • core-js提供了polyfill的核心实现
    • regenerator-runtime是generator以及async/await的运行时依赖

    core-js是一套模块化的JS标准库

    // .babelrc
    {
      "presets": [
        ["@babel/preset-env", {
          "useBuiltIns": "usage",
          "corejs": 3
        }]
      ]
    }
    

    @babel/runtime & @babel/plugin-transform-runtime

    babel 在转换代码的过程中会在模块顶部插入一些帮助函数

    class A {}
    

    编译之后

    'use strict';
    
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError('Cannot call a class as a function');
      }
    }
    
    var A = function A() {
      _classCallCheck(this, A);
    };
    
    npm install --save-dev @babel/plugin-transform-runtime
    npm install --save @babel/runtime
    

    _classCallCheck2已经变成从@babel/runtime中引入

    @babel/plugin-transform-runtime将所有使用到帮助方法的地方,从各自维护一份改为从@babel/runtime中引入

    参考

    • 解剖Babel

    起源地下载网 » 【工程】你所要知道的Babel

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元