角度 13 更新"Duplicate identifier"错误



我正在维护一个提供角度组件的专用npm包。我正试图将包更新到angular 13(从angular 12(,并使一切正常工作,所以我向npm发布了一个新版本。当我尝试使用该包时,我得到了几个错误,如下所示:

TS2300: Duplicate identifier 'ɵdir'.

TS2300: Duplicate identifier 'ɵfac'.

我将angularCompilerOptions更改为使用"compilatonMode": "partial",并删除了选项"enableIvy": false,发布了一个新版本,但我仍然收到相同的错误。

有人知道我做错了什么吗?或者有什么可能导致这个问题的线索吗?非常感谢stackoverflow社区。:(

EDIT:一个有趣的观察结果是,在消费包中的npm install之后,node_modules/my-package中的文件(这里以accordion.d.ts为例(看起来如下:

import { AfterContentInit } from '@angular/core';
import { CdkAccordion } from '@angular/cdk/accordion';
import * as i0 from "@angular/core";
export declare class Accordion extends CdkAccordion implements AfterContentInit {
private _keyManager;
private _headers;
ngAfterContentInit(): void;
private radio;
private _handleHeaderKeydown;
private _handleHeaderFocus;
static ɵfac: i0.ɵɵFactoryDeclaration<Accordion, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<Accordion, "accordion", ["Accordion"], { "multi": "multi"; "radio": "radio"; }, {}, ["_headers"]>;
}

我一启动应用程序(使用调用ng servenpm start(,文件就变为:

import { AfterContentInit } from '@angular/core';
import { CdkAccordion } from '@angular/cdk/accordion';
import * as i0 from "@angular/core";
import * as ɵngcc0 from '@angular/core';
export declare class Accordion extends CdkAccordion implements AfterContentInit {
private _keyManager;
private _headers;
ngAfterContentInit(): void;
private radio;
private _handleHeaderKeydown;
private _handleHeaderFocus;
static ɵfac: i0.ɵɵFactoryDeclaration<Accordion, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<Accordion, "accordion", ["Accordion"], { "multi": "multi"; "radio": "radio"; }, {}, ["_headers"]>;
static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<Accordion, never>;
static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<Accordion, never, never, {}, {}, never>;
}
//# sourceMappingURL=accordion.d.ts.map

因此,错误消息对重复的标识符efacedir有一定的意义,但它为什么要这样做呢?还要注意ng serve之后添加的ɵngcc0的导入。

我在github上发现了类似的问题,并通过删除node_modules/my-package/my-package.metadata.json中的metadata.json文件使其正常工作。在检查了我的组件库的/dist文件夹后,我在那里也发现了metadata.json文件,所以我删除了它并重建了它。现在这个文件没有再次生成。我想问题解决了🤷‍♂️

希望这能帮助其他人。顺便说一句:我想改变构建过程,以便在构建之前清除/dist是有意义的。

最新更新