指定要在 Angular 中使用的 NPM 模块平台

Specify NPM module platform to use in Angular

我有一个现有的 Angular 应用程序,它在 Chrome 中很有用,但在(显然)Internet Explorer 上失败了。这是怎么回事:

我安装的几个 NPM 模块带有不同的发行版。例如,kendo-angular-charts 下的文件夹结构如下所示:

- dist
   |- cdn
   |- es
   |- es2015
   |- npm
   |- systemjs

当站点在 IE 中崩溃时,是因为 es2015\common\configuration.service.js 中的以下声明:

export class Change {
    constructor(key, value) {
        this.key = key;
        this.value = value;
    }
}

它中断(无效语法错误)因为 ES2015 类 是 not supported in Internet Explorer。但是 es 文件夹中还有一个完全有效的 ES5 版本文件。

那么我该如何使用它呢?

我检查了 angular.jsonpackage.json 似乎相关的选项,但找不到任何东西。

请参阅 Angular 浏览器支持文档 (https://angular.io/guide/browser-support#enabling-polyfills) - 无需导入不同版本的特定包。如果您使用 Angular CLI,您只需编辑 src/polyfills.ts 文件并取消注释浏览器 polyfill。

如果您不使用 Angular CLI,您可以使用 NPM 导入 core-js 并导入相关的 polyfills (https://www.npmjs.com/package/core-js)。

有没有找到这个问题的答案。我对网格有同样的问题。几周前它还在工作,现在不行了。我无法确定是什么改变导致使用 es2015 与 es 库。是否有特定的 core-js polyfill 可以控制它?

指定要在编译器 output 中使用的 JavaScript 方言的正确方法是 target 属性 in tsconfig.json。在我们的例子中,我们需要将其值设置为 es5.

但这仅适用于您的代码,不适用于导入的包。

此外,大多数导入通常只指定包名称,但您也应该查找专门针对错误版本的导入。在我们的例子中,我们在 @progress/kendo-angular-charts/dist/es2015 下进行了导入,这是我们问题的根源。