es7.promise.finally polyfill definition gets nuked by es6.promise polyfill
See original GitHub issueBug Report
Current Behavior
Using latest @babel/core, and @babel/transform-runtime (7.3.4) with useBuiltIns: 'usage'
set. It appears the the correct polyfills are being applied, however due to the order in which the require statements get generated, the polyfill definition for es7.promise.finally gets nuked by the es6.promise definition.
Expected behavior/code es7.promise.finally seems to extend native promise but loading es6.promise nukes the extension which then throws error in .finally() usage.
Babel Configuration (.babelrc, package.json, cli command)
Relevant config:
{
presets: [
[('@babel/preset-env'),
{
debug: true,
modules: false,
targets: {
ie: '11'
},
useBuiltIns: 'usage'
}],
'@babel/preset-react'
],
plugins: [
['@babel/plugin-transform-runtime',
{
useESModules: true,
helpers: true
}
]
]
}
Environment
- Babel version(s): 7.3.4
- Node/npm version: 10.x LTS
- How you are using Babel: webpack + babel-loader with babel.config.js
Possible Solution
Unclear from my searching if there is a way to order the polyfills. I’ve tried explicitly using “include” and passing in es6.promise
followed by es7.promise.finally
but seems to make no difference. Current workaround is to add the following to exclude and add them manually, in proper order to my entry point, e.g.
babel.config.js
...
[('@babel/preset-env'),
{
debug: true,
modules: false,
exclude: ['es7.promise.finally', 'es6.promise'],
targets: {
ie: '11'
},
useBuiltIns: 'usage'
}],
...
entry.js
import 'core-js/modules/es6.promise';
import 'core-js/modules/es7.promise.finally';
...
/edit: Adding sample section of generated imports as they appear in final output in “incorrect” order
// EXTERNAL MODULE: [omitted]/node_modules/core-js/modules/es7.promise.finally.js
var es7_promise_finally = __webpack_require__("../../node_modules/core-js/modules/es7.promise.finally.js");
// EXTERNAL MODULE: [omitted]/node_modules/@babel/runtime/helpers/esm/typeof.js
var esm_typeof = __webpack_require__("../../node_modules/@babel/runtime/helpers/esm/typeof.js");
// EXTERNAL MODULE: [omitted]/node_modules/tslib/tslib.es6.js
var tslib_es6 = __webpack_require__("../../node_modules/tslib/tslib.es6.js");
// EXTERNAL MODULE: [omitted]/node_modules/core-js/modules/es6.array.iterator.js
var es6_array_iterator = __webpack_require__("../../node_modules/core-js/modules/es6.array.iterator.js");
// EXTERNAL MODULE: [omitted]/node_modules/core-js/modules/es6.string.iterator.js
var es6_string_iterator = __webpack_require__("../../node_modules/core-js/modules/es6.string.iterator.js");
// EXTERNAL MODULE: [omitted]/node_modules/core-js/modules/web.dom.iterable.js
var web_dom_iterable = __webpack_require__("../../node_modules/core-js/modules/web.dom.iterable.js");
// EXTERNAL MODULE: [omitted]/node_modules/@babel/runtime/regenerator/index.js
var regenerator = __webpack_require__("../../node_modules/@babel/runtime/regenerator/index.js");
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
// EXTERNAL MODULE: [omitted]/node_modules/core-js/modules/es6.promise.js
var es6_promise = __webpack_require__("../../node_modules/core-js/modules/es6.promise.js");
Issue Analytics
- State:
- Created 5 years ago
- Comments:5 (2 by maintainers)
This PR will be landed in next some days. You already wrote a simple own workaround and it should work fine.
Fixed in #7646 with
corejs: 3
option.