@babel/preset-env 解决Promise被Babel编译成regenerator 运行时错误问题

"useBuiltIns"

默认为false, 不为每个文件自动添加polyfill,也不要进行转换import "core-js"或import "@babel/polyfill"更改为单个polyfill。

"usage": 按需导入填充物

填充物主要来自core-jsregenerator-runtime等开源项目.

"useBuiltIns": "usage"

填充物示例如下(babel转译后源码):

require("core-js/modules/es6.object.define-property");
require("regenerator-runtime/runtime");
require("core-js/modules/es6.promise");
require("core-js/modules/es6.object.to-string");

"entry": 从全局使用填充物

entry代表填充物在入口js文件中填充到全局空间中, 不需要为每个js文件导入填充物.
因此常发生ReferenceError:

ReferenceError: regeneratorRuntime is not defined
    at _foo2 (/home/githmb/babel/b.js:49:43)
    at foo (/home/githmb/babel/b.js:45:16)
    at main (/home/githmb/babel/b.js:13:3)

targets.esmodules

现代浏览器其实不需要填充:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": "commonjs",
        "useBuiltIns": false,
        "targets": {
          "esmodules": true
        }
      }
    ],
    "@babel/typescript"
  ]
}

END

原文地址:https://www.cnblogs.com/develon/p/13977929.html