【发布时间】:2019-01-21 19:42:09
【问题描述】:
我有一个 Angular CLI 工作区,其中包含两个库项目,foo 和 bar。当我构建两个库中的第二个 foo 时,构建失败并出现以下错误:
错误 TS6059:文件 '/code/projects/bar/src/lib/types.ts' 不在 'rootDir' '/code/projects/foo/src'。 'rootDir' 预计包含 所有源文件。
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-packagr 或ngc 或tsc 的错误吗?还是仅仅是配置问题?
观察
下面是代码更改,我可以通过这些更改使构建通过,但我想知道导致代码错误的原因。
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 的角度来看,显示的错误是有意义的,但是我并不真正了解 Angular CLI。由于您没有在 tsconfig 中设置
rootDir属性,Angular CLI 似乎在内部将其限制为您要编译的库的根目录。然后,如果你import外面的另一个库,TypeScript 理所当然地抱怨。关于rootDir看这里:stackoverflow.com/questions/57422458/…(免责声明:我的回答)。
标签: angular typescript angular-cli ng-packagr angular-library