Pin babel-preset-react-app to a minor core-js version as per core-js readme
See original GitHub issueIs your proposal related to a problem?
I’ve been trying to polyfill Promise.allSettled
for Edge by using react-app-polyfill/stable but failing. My expectation was that it should work since react-app-polyfill@1.0.6 depends on core-js@3.6.4 and Promise.allSettled
was moved into core-js/stable on v3.2.0.
I’ve dug a bit deeper to find that babel-preset-react-app has corejs set to major version 3 (https://github.com/facebook/create-react-app/blob/v3.4.1/packages/babel-preset-react-app/dependencies.js#L91)
Looking at the core-js readme I see this:
Warning! Recommended to specify used minor core-js version, like corejs: ‘3.6’, instead of corejs: 3, since with corejs: 3 will not be injected modules which were added in minor core-js releases.
Locally I’ve set corejs in babel-preset-react-app to 3.2 (just a proof this is the issue) and I can see Promise.allSettled
is now polyfilled correctly.
It’s not clear to me why babel-preset-react-app does not follow the advice of core-js and pin to a minor version?
Describe the solution you’d like
Update babel-preset-react-app to pin to a minor version of corejs in it’s configuration.
Describe alternatives you’ve considered
Eject and manage babel-preset-env myself but I’m very reluctant to go down this route.
I look forward to being told why things aren’t as simple as changing babel-preset-react-app configuration 😃
Issue Analytics
- State:
- Created 3 years ago
- Reactions:9
- Comments:5
Top GitHub Comments
The similar issue,
babel-plugin-polyfill-corejs3
removes my side-effect import because ofbabel-preset-react-app
provides old version ofcore-js
and there is no way to specify a correct version at least3.17
. So I just wanted to use the latest stable ES with nice stuff likeArray.prototype.at
,Object.hasOwn
and so on and importing it like a polyfillimport "core-js/es/array/at";
with only side effect does not work 😦 The sole solution I’ve found so far is to useexport * from "core-js/es/array/at";
instead of side effect import, but I don’t like it. It would be much better to add an option forcorejs
version, or at least update it to the latest3.20
Thanks @pakaponk, I’m doing the same as you as a workaround in my project knowing the CRA is specifically targetting v3 of core-js.
This issue is really to explore what’s stopping CRA from targetting a more recent version of core-js. core-js@3.0.0 was released over a year ago now (19 Mar 2019).