【发布时间】:2019-08-10 00:04:01
【问题描述】:
@babel/polyfill 的文档有以下注释:
如果您正在寻找不会修改要在工具/库中使用的全局变量的东西,请查看 transform-runtime 插件。
在transform-runtime 文档中,它说如下:
虽然这种 [@babel/polyfill 用法] 对于应用程序或命令行工具来说可能没问题,但如果您的代码是一个您打算发布给其他人使用的库,或者您不能完全发布,这就会成为问题控制代码运行的环境。
更一般地说,很多解释 polyfill 使用的文章都说,可能希望使用不同的解决方案如果你关心污染全局命名空间。
据我了解,大多数 polyfill 都是有条件地加载的。如果一个实现已经存在,polyfill 不会覆盖它。我的问题是:在什么情况下,外部脚本中的 polyfill 会导致现有网站崩溃?到目前为止,我能够找到的唯一原因是外部脚本可能会比网站本身的代码更早地加载 polyfill。这可能会导致问题,但是当这些 polyfill 基于 Web 标准时,它们的行为应该是相同的。仍然存在严重冲突的可能性有多大?
我在github issue 上发现了一个有趣的讨论。不过,这里主要讨论的是 NPM 生态系统中的模块,而我最感兴趣的是促进小部件或嵌入之类的外部脚本。
感谢任何个人经验或有关该主题的讨论和文章的链接!
更新:这个问题的主要原因之一是转换运行时存在一些问题。随着 core-js 和 babel 的新版本,这些问题似乎已经得到解决。无论如何,我仍然对上述原始问题的答案感兴趣。
【问题讨论】:
标签: javascript babeljs polyfills web-standards babel-polyfill