@babel/polyfill 已经过时,目前被core-js和generator-runtime 所取代

除了预设可以转换代码以外,插件也可以转化代码,他们的顺序是:

  • 插件是在 preset 前运行
  • 插件的顺序是从前到后
  • preset 顺序是从后道歉

通常情况下,@babel/preset-env 只转换那些已经形成正式标准的语法,对于某些早起阶段,还没有确定下来的语法不做转换

要转换这些语法,就要单独使用插件

下面随便列举一些插件

@babel/plugin-proposal-class-properties

该插件可以让你在类中书写初始化字段

  1. class A{
  2. a=1;
  3. constructor(){
  4. this.b=3;
  5. }
  6. }

@babel/plugin-proposal-function-bind

该插件可以让你轻松为某个方法绑定this

  1. function Print(){
  2. console.log(this.loginId);
  3. }
  4. const obj={
  5. loginId:"abc";
  6. }
  7. obj::Print(); //相当于:Print.call(obj);

遗憾的是:: 语法会在vscode里面报错,但是并不影响编译

@babel/plugin-proposal-optional-chaining

  1. const obj={
  2. foo:{
  3. bar:{
  4. baz:42,
  5. }
  6. }
  7. }
  8. const baz=obj?.foo?.bar?.bar;
  9. const safe=obj?.qux?.baza;

允许在对象使用?判断符号,当属性有个属性的时候,会读取属性,而且在属性连读取的时候,如果其中一个链未读取到,既不会向后面进行读取了,不会在运行时报错

babel-plugin-transform-remove-console

该插件会移除源码中的控制台输出语句

  1. console.log('foo');
  2. console.error("bar");

@babel/plugin-transform-runtime

这个库提供了一些公共的api,会自动抽离一下公共的api