Open
Description
Hi guys! Thank you for all your great work here, I really think babel-polyfills
is the good path to follow. It just took me some time to find it.
Yesterday I started the migration in one library from a @babel/preset-env
/@babel/plugin-transform-runtime
setup. I carefully read all your notes and some of the source code involved, however, I wrote down some doubts that I would like to clarify before making my changes definitive.
Considering the following situation:
BEFORE | AFTER |
---|---|
{
"presets": [
["@babel/preset-env", {
"spec": true,
"modules": false,
"targets": "...",
"ignoreBrowserslistConfig": true
}]
],
"plugins": [
["@babel/transform-runtime", {
"version": "^7.17.9",
"corejs": { "version": 3, "proposals": true },
"useESModules": true
}]
]
} |
{
"targets": "...",
"browserslistConfigFile": false,
"presets": [
["@babel/preset-env", {
"spec": true,
"modules": false,
"ignoreBrowserslistConfig": true
}]
],
"plugins": [
["@babel/transform-runtime", {
"version": "^7.17.9",
}],
["polyfill-corejs3", {
"method": "usage-pure"
}]
]
} |
(Having @babel/runtime
as a runtime dependency and @babel/preset-env
, @babel/plugin-transform-runtime
and babel-plugin-polyfill-corejs3
as development dependencies, after migration.)
The following doubts arise:
- Will
@babel/runtime
helpers be transpiled/polyfilled? Since we are not referencing them from the corejs source anymore (@babel/runtime-corejs3
). For example, if@babel/runtime/helpers/asyncToGenerator
is used, willPromise
be polyfilled inside it? (Without polluting the global scope). (Maybe this could be a problem because I think it is not possible anymore to disable general polyfills in@babel/plugin-transform-runtime
while still importing helpers from@babel/runtime-corejs3
.) - With
babel-plugin-polyfill-corejs3
, is it possible to use a specific version ofcore-js
? (like3.18.1
). Should/can we addcore-js-pure
(or other flavor) as a runtime dependency explicitly in our library? - Can proposals be 'opt-in', like with
proposals
option in@babel/plugin-transform-runtime
? - Will ES6 modules always be used? How does the plugin decide when to use ES6 or CJS?
- Is this new system beta? Can it be reliably used in critical projects? With proper testing, etc.
Hope I am not missing or confusing anything. I would really appreciate any insights.
Thank you again!
Metadata
Assignees
Labels
No labels