【发布时间】:2020-10-20 00:44:43
【问题描述】:
我决定不再支持旧版浏览器并放弃对 ES5 编译/polyfills 的支持。
我将 Angular 项目代码编译为 ~85% 的覆盖率
"compilerOptions": {
"target": "es2016",
"module": "es2020",
"lib": [
"es2019",
"dom"
这些选项控制项目的代码。
但是,Angular 库编译为 ES2015。
我们如何将项目的 VENDOR 包编译成 ES2016/17/18/19/20?
【问题讨论】:
-
如果你打算使用 ES2020 模块语法,为什么不以 ES2020 为目标呢? ES2016(
Array.prototype.includes和指数语法)中添加的内容不足以保证解决问题(IMO)。 ES2020 为您提供可选的链接和无效合并。 -
虽然kangax.github.io/compat-table/esnext es2016 看起来很安全,但它看起来覆盖率很差。不管怎样,你会怎么做?
-
您发送的链接是针对“ESNext”的,这是通常未实施的提案(第 3 阶段提案除外)。你想看看2016+ which is where ES2020 is。除了 IE11 和 Edge (Chakra) 等过时的浏览器以及 Firefox 的 ESR 版本之外,它具有广泛的支持。就个人而言,我尝试在
target、module和lib中保持我的ES 版本相同。我选择哪个版本取决于我所服务的客户以及他们的风险承受能力。 -
您找到解决方案了吗?
-
@Dennis 不,但实际上这个词是 Angular 团队正在做类似的事情,但目前没有办法为 Angular 供应商文件执行此操作。我们似乎能做的就是使用差异加载来仅为旧浏览器加载 polyfill。我认为在团队为我们提供解决方案之前,我们会陷入困境。也许随着 Webpack 5 的更新。
标签: angular typescript ecmascript-6 ecmascript-2016