You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Pin babel-preset-react-app to a minor core-js version as per core-js readme #8779
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.
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 :)
At that time, I solved it by importing the specific polyfill instead of just corejs
import 'core-js/modules/esnext.string.match-all';
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).
Reacted by Pakapon Kaewmark, Ethan Setnik, roman, Sergey Vlasov and Aleksandr Chernyavenko
The similar issue, babel-plugin-polyfill-corejs3 removes my side-effect import because of babel-preset-react-app provides old version of core-js and there is no way to specify a correct version at least 3.17.
So I just wanted to use the latest stable ES with nice stuff like Array.prototype.at, Object.hasOwn and so on and
importing it like a polyfill import "core-js/es/array/at"; with only side effect does not work :(
The sole solution I've found so far is to use export * 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 for corejs version, or at least update it to the latest 3.20
Reacted by csc-bo, Titanium, zahgboat, martin, Nik Sauer and Sergey Vlasov
I have a similar issue when polyfilling Array.prototype.at
and an ugly but useful workaround is to force import and use it to avoid tree-shaking (? or anything like that)
As soon as CRA will be updated to automatically use current node_modulescore-js version (same as in the snippet above) – you will be able to remove this code snippet from you craco config 🙌
Reacted by Alexander Balandin, Aleksandr Chernyavenko and yar2001
Activity
pakaponk commentedon Apr 15, 2020
I had the same problem four months ago.
At that time, I solved it by importing the specific polyfill instead of just
corejsMrman commentedon Apr 16, 2020
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).
puopg commentedon Oct 6, 2021
Yea agreed, or at least expose an option to configure it if you so desire.
xprommer commentedon Jan 9, 2022
The similar issue,
babel-plugin-polyfill-corejs3removes my side-effect import because ofbabel-preset-react-appprovides old version ofcore-jsand 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 like
Array.prototype.at,Object.hasOwnand so on andimporting it like a polyfill
import "core-js/es/array/at";with only side effect does not work :(The sole solution I've found so far is to use
export * 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 for
corejsversion, or at least update it to the latest3.20AndyBoat commentedon Aug 15, 2022
I have a similar issue when polyfilling
Array.prototype.atand an ugly but useful workaround is to force import and use it to avoid
tree-shaking(? or anything like that)jakwuh commentedon Oct 8, 2023
If you are using
cracoto override CRA config - you can overridecorejsversion by using the following codeAs soon as CRA will be updated to automatically use current
node_modulescore-jsversion (same as in the snippet above) – you will be able to remove this code snippet from you craco config 🙌