0

我刚刚阅读了一篇文章,它提供了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";

所以似乎什么都没有改变?他们只是告诉我们单独导入它们。

关于为什么新版本不会污染全局范围,我只有一些模糊的想法:

  1. 2.x版本core-js会污染全局范围,而最新版本3.x不会。

  2. 的文档@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"
    },
    

    这些依赖项不会污染全局范围吗?

谁能解释一下如何理解从旧巴别塔到新巴别塔的过渡?

4

0 回答 0