@babel/preset-env 解决Promise被Babel编译成regenerator 运行时错误问题
"useBuiltIns"
默认为false, 不为每个文件自动添加polyfill,也不要进行转换import "core-js"或import "@babel/polyfill"更改为单个polyfill。
"usage": 按需导入填充物
填充物主要来自core-js
、regenerator-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"
]
}