我正在维护一个提供角度组件的专用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 serve
的npm 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
因此,错误消息对重复的标识符efac
和edir
有一定的意义,但它为什么要这样做呢?还要注意ng serve
之后添加的ɵngcc0的导入。
我在github上发现了类似的问题,并通过删除node_modules/my-package/my-package.metadata.json
中的metadata.json文件使其正常工作。在检查了我的组件库的/dist
文件夹后,我在那里也发现了metadata.json文件,所以我删除了它并重建了它。现在这个文件没有再次生成。我想问题解决了🤷♂️
希望这能帮助其他人。顺便说一句:我想改变构建过程,以便在构建之前清除/dist
是有意义的。