Angular 打包角度库以支持角度8、9和10的正确方法

Angular 打包角度库以支持角度8、9和10的正确方法,angular,typescript,angular-library,ng-packagr,Angular,Typescript,Angular Library,Ng Packagr,随着Angular 10的发布,我正在将用于构建库+演示应用程序的Angular版本更新到版本10 一般来说,这进展顺利,并且库与Angular的早期版本保持兼容,但本版本的情况似乎并非如此(基于Angular 9构建的早期版本适用于Angular 8) 输出类型脚本定义文件包括: import * as ɵngcc0 from '@angular/core'; ... static ɵfac: ɵngcc0.ɵɵFactoryDef<QrCodeComponent, never>

随着Angular 10的发布,我正在将用于构建库+演示应用程序的Angular版本更新到版本10

一般来说,这进展顺利,并且库与Angular的早期版本保持兼容,但本版本的情况似乎并非如此(基于Angular 9构建的早期版本适用于Angular 8)

输出类型脚本定义文件包括:

import * as ɵngcc0 from '@angular/core';

...

static ɵfac: ɵngcc0.ɵɵFactoryDef<QrCodeComponent, never>;
static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta<QrCodeComponent, "qr-code", never, { "value": "value"; "size": "size"; "errorCorrectionLevel": "errorCorrectionLevel"; }, {}, never, never>;
我使用以下工具创建了test angular 8项目:

npx @angular/cli@^8 new ngqrcode-ng8-test
您可以在此处看到我对该更改的WIP请求:

注意:我的编译器选项中已经有enableIvy false:

"angularCompilerOptions": {
    "enableIvy": false
  }

有没有一种方法可以使用Angular v10构建一个库,以保持与Angular v8的兼容性?

Angular 10有两大突破性变化:


  • 10需要tslib 2.0.0,与之相比,
    tslib
    的更改通过将其更改为模块的直接依赖项而不是
    peerDependency
    来实现-最终您的捆绑包中会同时包含tslib v1和v2,但这是意料之中的,以及他们进行此迁移的原因。一般来说,类型脚本的更改可能有问题,但我不认为这是原因。我想你可能是对的,但这是不可能的。我也在努力跟上角度的突破性变化。这种不兼容基本上是由于角度编译的内部工作方式发生了变化。因此,因为这可能是一个突破性的改变,所以没有办法保持向后兼容性。使用NG9构建的库更有可能用于未来版本。
    "angularCompilerOptions": {
        "enableIvy": false
      }