我刚刚阅读了一篇文章,它提供了package.json 的@babel/polyfill
链接,这是它的依赖项:
"dependencies": {
"core-js": "^2.6.5",
"regenerator-runtime": "^0.13.4"
}
并从它的当前文档中@babel/polyfill
指出:
从 Babel 7.4.0 开始,该包已被弃用,取而代之的是直接包含 core-js/stable(用于填充 ECMAScript 功能)和 regenerator-runtime/runtime(需要使用转译的生成器函数):
import "core-js/stable"; import "regenerator-runtime/runtime";
所以似乎什么都没有改变?他们只是告诉我们单独导入它们。
关于为什么新版本不会污染全局范围,我只有一些模糊的想法:
的
2.x
版本core-js
会污染全局范围,而最新版本3.x
不会。的文档
@babel/plugin-transform-runtime
说:注意:诸如 "foobar".includes("foo") 之类的实例方法仅适用于 core-js@3。如果需要 polyfill,可以直接导入 "core-js" 或使用 @babel/preset-env 的 useBuiltIns 选项。
和:
这个转换器的另一个目的是为您的代码创建一个沙盒环境。如果直接导入 core-js 或 @babel/polyfill以及它提供的 Promise、Set 和 Map 等内置函数,会污染全局作用域。虽然这对于应用程序或命令行工具来说可能没问题,但如果您的代码是一个您打算发布以供其他人使用的库,或者您无法完全控制代码运行的环境,那么它就会成为一个问题。
因此
regenerator-runtime
,他们使用 this ,而不是可能污染全局范围,@babel/plugin-transform-runtime
其依赖项是:"dependencies": { "@babel/helper-module-imports": "workspace:^7.14.5", "@babel/helper-plugin-utils": "workspace:^7.14.5", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "condition:BABEL_8_BREAKING ? ^7.3.4 : ^6.3.0" },
这些依赖项不会污染全局范围吗?
谁能解释一下如何理解从旧巴别塔到新巴别塔的过渡?