gpt4 book ai didi

angular - 'rootDir' 应包含所有源文件

转载 作者:太空狗 更新时间:2023-10-29 17:07:24 33 4
gpt4 key购买 nike

我有一个 Angular CLI 工作区,其中包含两个库项目,foobar。当我构建两个库中的第二个库 foo 时,构建失败并出现以下错误:

error TS6059: File '/code/projects/bar/src/lib/types.ts' is not under 'rootDir' '/code/projects/foo/src'. 'rootDir' is expected tocontain all source files.

Error: error TS6059: File '/code/projects/bar/src/lib/types.ts' is not under 'rootDir' '/code/projects/foo/src'. 'rootDir' is expected to contain all source files.

at Object.<anonymous> (/code/node_modules/ng-packagr/lib/ngc/compile-source-files.js:53:68)
at Generator.next (<anonymous>)
at /code/node_modules/ng-packagr/lib/ngc/compile-source-files.js:7:71
at new Promise (<anonymous>)
at __awaiter (/code/node_modules/ng-packagr/lib/ngc/compile-source-files.js:3:12)
at Object.compileSourceFiles (/code/node_modules/ng-packagr/lib/ngc/compile-source-files.js:19:12)
at Object.<anonymous> (/code/node_modules/ng-packagr/lib/ng-v5/entry-point/ts/compile-ngc.transform.js:26:32)
at Generator.next (<anonymous>)
at /code/node_modules/ng-packagr/lib/ng-v5/entry-point/ts/compile-ngc.transform.js:7:71
at new Promise (<anonymous>)

我已经在 GitHub 上的沙盒存储库中重现了错误 here .我已尽可能简化代码,同时仍然遇到错误。您可以通过在 rootDir-expect-all-source-files-error 上执行 npm run build 来重现错误分支。错误的原因是什么?这可能是 ng-packagrngctsc 的错误?还是仅仅是配置问题?

观察

下面是我可以使构建通过的代码更改,但我想知道是什么导致了代码的错误。

bar.component.ts

构建失败

export class BarComponent {

list = this.barService.list();

constructor(private barService: BarService) {}
}

构建过程

在构造函数中初始化列表属性而不是内联

export class BarComponent {

list;

constructor(private barService: BarService) {
this.list = this.barService.list();
}
}

bar.service.ts

构建失败

import { Injectable } from '@angular/core';
import { List, Item } from './types';

@Injectable({
providedIn: 'root'
})
export class BarService {

private _list: List = [];

constructor() { }

add(item: Item): void {
this._list.push(item);
}

list(): List {
return this._list;
}
}

构建过程

删除数据类型

import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root'
})
export class BarService {

private _list: any[] = [];

constructor() { }

add(item: any): void {
this._list.push(item);
}

list(): any {
return this._list;
}
}

最佳答案

这看起来像是由于 TypeScript 2.9 中引入的 import types 而出现的问题。发出时,这些未正确重新布线,请参见第 3 行。

dist/bar/lib/bar.component.d.ts(5,11):

export declare class BarComponent implements OnInit {
private barService;
list: import("projects/bar/src/lib/types").Item[];
constructor(barService: BarService);
ngOnInit(): void;
}

在上面发出的 dts 中,list: import("projects/bar/src/lib/types").Item[]; 应该类似于 import("./types").Item[]; 代替。

解决此问题的方法是从您的代码中显式设置它,而不是推断类型。

bar.component.ts 中更改以下内容;

list = this.barService.list();

到:

list: Item[] = this.barService.list();

这将删除类型导入并构建消费库。

我还检查了一些 future 版本的 TypeScript,它仍然是 TypeScript 3.0.1 中的一个问题,但看起来它已经在 dev 版本中得到解决TypeScript 3.1.0,即 3.1.0-dev.20180813

关于angular - 'rootDir' 应包含所有源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850063/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com