'rootDir'应包含所有源文件

Sam*_*ann 12 typescript angular-cli angular angular-library ng-packagr

我有一个Angular CLI工作区,包含两个库项目,foobar.当我构建两个库中的第二个时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>)
Run Code Online (Sandbox Code Playgroud)

我已复制了错误的沙箱回购GitHub上这里.我仍然遇到错误,尽可能地简化了代码.您可以通过npm run buildrootDir-expect-all-source-files-error分支上执行来重现错误.错误的原因是什么?可能这是一个或与ng-packagr或的错误?或者只是一个配置问题?ngctsc

意见

下面是我可以进行构建传递的代码更改,但我想知道导致错误的原因是什么.

bar.component.ts

构建失败

export class BarComponent {

  list = this.barService.list();

  constructor(private barService: BarService) {}
}
Run Code Online (Sandbox Code Playgroud)

建立通行证

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

export class BarComponent {

  list;

  constructor(private barService: BarService) {
    this.list = this.barService.list();
  }
}
Run Code Online (Sandbox Code Playgroud)

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

建立通行证

删除数据类型

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Abh*_*ash 10

我有一个打字稿项目,并遇到了一个问题,抱怨导入时出现相同的错误。include我通过更正文件中的值解决了这个问题,tsconfig.json如下所示

{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ES2017",
    "noImplicitAny": true,
    "preserveConstEnums": true,
    "outDir": "./dist",
  },
  "exclude": ["node_modules", "**/*.test.ts"],
  "include": ["src"]
}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。

  • 值得注意的是,需要删除 tsconfig.json 中的 ``"rootDir":```` 属性。 (7认同)

mve*_*and 9

我有同样的问题,但@Agius 的解决方案没有帮助。

我有:

Angular Workspace
  - projects
      - lib1
      - lib2
  - src
      - test application
Run Code Online (Sandbox Code Playgroud)

事实上,我已经通过在 WebStorm 中拖动文件夹将一个组件从 lib2 移动到了 lib1。通过这样做,lib2 中对该组件的引用不会被删除,而是被更新并指向 lib1 的源文件夹。我忘了删除 lib2 中不再需要的这些引用。在删除对 lib2 中组件的所有引用后,该库被编译。

我不得不删除中的引用

  • public_api.ts
  • ./lib/lib2.module.ts

也许你的项目中有更多的参考。


小智 6

该问题与未正确提供导入路径的导入语句有关。

例如:-

 import * from '../.././../tools1/tools2/tools/demo';
Run Code Online (Sandbox Code Playgroud)

应该

import * from '@tools/tools/demo';
Run Code Online (Sandbox Code Playgroud)

这里@tools被认为是根目录。注意:- 上述路径只是一个示例。


A. *_*ius 5

这似乎是由于import types中引入了所引起的问题TypeScript 2.9。发出时,这些未正确接线,请参见第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;
}
Run Code Online (Sandbox Code Playgroud)

在上面发出的dtslist: import("projects/bar/src/lib/types").Item[];应该是类似的东西import("./types").Item[];

一种解决方法是,从代码中推断出类型,然后显式设置它。

bar.component.ts变化的下面;

list = this.barService.list();
Run Code Online (Sandbox Code Playgroud)

至:

list: Item[] = this.barService.list();
Run Code Online (Sandbox Code Playgroud)

这将删除导入类型,并且将构建使用库。

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

  • 万分谢意!在您的帮助下,我能够确认版本3.1.0-dev.20180810及之前的版本中发生了构建错误,但是正如您所指出的那样,版本3.1.0-dev.20180813的构建成功了。 (2认同)

Dat*_*eek 5

如果您使用https://nx.dev并收到此错误...

我也遇到这个问题了...

这简直要了我的命……我不明白为什么 nx 没有正确构建……它给了我很多关于我引用的项目 @scope1/lib2 及其所有 .ts 文件都在外部的错误引用它的项目...我还注意到 dep-graph 有 @scope1/lib2 但引用库中没有依赖箭头...

我找到了这个修复:

rm -rf node_modules/.cache
Run Code Online (Sandbox Code Playgroud)

我猜测 nx 的缓存中存在错误的内容...删除后,dep-graph 最终正确显示了链接并且构建开始工作

  • 谢谢!这是我在使用 nx 时遇到的问题,此修复帮助解决了问题 (2认同)

归档时间:

查看次数:

11012 次

最近记录:

7 年 前