J'ai un espace de travail CLI angulaire contenant deux projets de bibliothèque, foo
et bar
. Lorsque je construis la deuxième des deux bibliothèques, foo
, la construction échoue avec l'erreur suivante:
erreur TS6059: le fichier '/code/projects/bar/src/lib/types.ts' n'est pas sous 'rootDir' '/ code/projects/foo/src'. 'rootDir' devrait contenir tous les fichiers source.
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>)
J'ai reproduit l'erreur dans un dépôt de sandbox sur GitHub here . J'ai simplifié le code autant que possible tout en continuant à rencontrer l'erreur. Vous pouvez reproduire l'erreur en exécutant npm run build
sur la branche rootDir-expect-all-source-files-error-error . Quelle est la cause de l'erreur? Peut-il s'agir d'un bogue avec ng-packagr
ou ngc
ou tsc
? Ou est-ce simplement un problème de configuration?
Vous trouverez ci-dessous des modifications de code avec lesquelles je peux faire passer la construction, mais j'aimerais savoir ce qui cause l'erreur avec le code tel quel.
export class BarComponent {
list = this.barService.list();
constructor(private barService: BarService) {}
}
Initialiser la propriété de liste dans le constructeur au lieu de inline
export class BarComponent {
list;
constructor(private barService: BarService) {
this.list = this.barService.list();
}
}
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;
}
}
Supprimer les types de données
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;
}
}
Cela ressemble au problème qui se produit en raison du import types
introduit dans TypeScript 2.9
. Lorsqu'ils sont émis, ils ne sont pas correctement câblés, voir la ligne 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;
}
Dans la variable dts
émise ci-dessus, list: import("projects/bar/src/lib/types").Item[];
devrait plutôt ressembler à import("./types").Item[];
.
Une solution de contournement à cela peut être que, dans votre code, au lieu de déduire le type, vous le définissez explicitement.
dans bar.component.ts
changer le ci-dessous;
list = this.barService.list();
à:
list: Item[] = this.barService.list();
Cela supprimera le type d'importation et la bibliothèque consommatrice se construira.
J'ai également vérifié un peu avec les futures versions de TypeScript, c'est toujours un problème dans TypeScript 3.0.1
, mais il semble que cela ait été résolu dans la version dev
de TypeScript 3.1.0
, c'est-à-dire 3.1.0-dev.20180813
J'ai eu le même problème, mais la solution de @Agius n'a pas aidé.
J'ai eu:
Angular Workspace
- projects
- lib1
- lib2
- src
- test application
En fait, j'avais déplacé un composant de lib2 vers lib1 en faisant glisser le dossier dans WebStorm. Ainsi, les références de ce composant dans lib2 n'étaient pas supprimées mais mises à jour et pointaient vers le dossier source de lib1. J'ai oublié de supprimer ces références qui n'étaient plus nécessaires dans lib2. Après avoir supprimé toutes les références au composant dans lib2, cette bibliothèque a été compilée.
J'ai dû enlever les références dans
Peut-être qu'il y a plus de références dans votre projet.