webpack的Babel加载器

Babel

Babel的转译过程分为三个阶段: parsing, transforming, generatingbabel只是转译新标准引入的语法,好比ES6的箭头函数转译成ES5的函数;而新标准引入的原生对象,部分原生对象新增的原型方法,新增API等(如Proxy, Set等),这些babel是不会转译的,须要用户自行引用polyfill来解决。浏览器

Babel转译过程:
解析parsing:将代码字符串解析成抽象语法树
变换transforming:对抽象语法树进行转换操做
生成generating:根据变换后的抽象语法树再生成代码字符串babel

plugins

插件应用于babel的转译过程,尤为是第二阶段transforming,若是这个阶段不使用任何插件的话,babel会原样输出代码。咱们主要关注第二阶段使用的插件,由于tranform插件会自动使用对应的词法插件,因此parsing阶段的插件不须要配置app

presets预设

为了减小配置转译过程当中使用的各种插件的麻烦,babel官方作了一些预设的插件集。
JS标准为例,babel提供了以下的一些preset:
es2015, es2016, es2017, env
es20xxpreset只转译该年份批准的标准,而env则代指最新的标准,包括lastestes20xx
另外,stage-0stage-4的标准成型以前的各个阶段,实验版的presets函数

stage-0: 稻草人,只是一个想法,多是babel插件
stage-1: 提案,初步尝试
stage-2: 初稿,完成初步规范
stage-3: 候选,完成规范和初步的浏览器实现
stage-4: 完成,将被添加到下一年度发布学习

babel-loader

用来处理ES6语法,将其编译成浏览器能够执行的js语法。ui

module.exports = {
  ...
  module: {
    rules: [{
      test: /\.jsx$/
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env'],//presets设置的就是当前js版本
          plugins: [require('@babel/plugin-transform-object-rest-spread')]//须要的插件
        }
      }
    }]
  }
};

options属性来给loader传递选项插件

babel-poyfill

polyfill会把ES2015+环境总体引入代码环境中,让你的代码能够直接使用新标准所引入的新原生对象。rest

要确保在入口处导入 polyfill,由于 polyfill代码须要在全部代码前先被调用
module.exports = {
  entry: ['babel-polyfill', './app/js']
};

babel-plugin-transform-runtime

babel-plugin-transform-runtime插件依赖babel-runtime, babel-plugin-transform-runtime插件是把js代码中使用的新原生对象和静态方法转换成对babel-runtime包的引用。code

未完待续,继续学习继续补充哦~
参考文献
【JavaScript】深刻理解Babel原理及其使用
相关文章
相关标签/搜索