Winkel-AOT-Kompilierung Fehler "nicht feststellen-Modul für die Klasse Komponente"
Habe ich eine Eckige (4.3.2) Anwendung, auf die ich durchführen möchten AOT bauen. App wurde erstellt mit @angular/cli
. Ich habe zwei Komponenten eingerüstet mit ng generate
und ein Modul, in dem beide enthalten sind, als eine Erklärung:
import {PrivateComponent} from './private.component/private.component';
NgModule({
imports: [
//other imports
PrivateRoutingModule
],
declarations: [
...some other components,
PrivateComponent,
AppTopBarComponent
]
//other stuff
})
export class PrivateModule {}
Private Komponente ist auch in das Modul routing:
const routes: Routes = [
{path: '', component: PrivateComponent, children: //other components}
]
@NgModule({
imports: [RouterModule.forChild(routes)] //this is the Angular built-in router module
})
export class PrivateRoutingModule {}
Beachten Sie, wie das routing war in einem anderen Modul definiert und importiert in PrivateModule
Die AppTopBarComponent
ist im PrivateComponent's
Vorlage. Also beide werden verwendet und erklärt. Aber wenn ich "node_modules/.bin/ngc" -p tsconfig-aot.json
(ich bin auf Windows 10), bekomme ich diese Fehlermeldung:
Cannot determine the module for class PrivateComponent in (path-to-project)/src/app/pages/private/private.component/private.component.ts! Add PrivateComponent to the NgModule to fix it.
Cannot determine the module for class AppTopBarComponent in (path-to-project)/src/app/pages/private/app.topbar.component.ts! Add AppTopBarComponent to the NgModule to fix it.
. Meine tsconfig-aot.json
Datei ist genau die gleiche wie in der Winkel-AOT bauen-Anleitung.
- Es ist erwähnenswert, die ich traf auf mehrere Fragen in der Sache, aber das problem war hauptsächlich für die unbenutzten Komponenten. Meine sind tatsächlich verwendet.
- Sie vergaß hinzuzufügen, PrivateComponent in import import {PrivateComponent} from './private.Komponente/privat.die Komponente';
- meine schlecht, ich vermisste es zwar kopieren-einfügen. Es ist tatsächlich in den Quellcode
- Die ersten @ für NgModule auch ?:)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Achten Sie darauf, nicht versehentlich zwei Dateien deklarieren die gleiche Komponente
Dieser oft passiert es mir, wenn ich in das falsche Verzeichnis wenn ich
ng g c
, und nicht sofort löschen Sie den falsch generierten Datei.In diesem Beispiel hatte ich
FeatureBoxGroupComponent
an zwei stellen definiert:Natürlich die Fehlermeldung sagt mir die genaue Datei hat es ein problem mit - aber es ist einfach, überblick über, die.
Einfach eine " suchen in Dateien für den Namen der Komponente, um zu sehen, überall dort, wo es auf die verwiesen wird, und stellen Sie sicher, es ist nur einmal definiert.
Habe ich tatsächlich eine Lösung gefunden. Das problem war, dass
PrivateComponent
importiert wurde, in einer anderen Datei, aber nicht verwendet, genau wie dies:Offenbar
ngc
versucht, link und alles ist verwirrt durch eine nicht verwendete importierenHatte ich dieses Problem und es verschwand, wenn ich
ng build
stattng build --prod
.Anscheinend hatte ich zwei Module, die ich war nicht mit, hatte aber nicht aus der app gelöscht-Ordner. Sie waren nicht deklariert in der app.- Modul.ts-Ordner.
Gemäß der Dokumentation der
--prod
flag bewirkt, dass der compiler einen Teil der dead code elimination als gut.Hier ist, wie ich dieses problem gelöst, vorausgesetzt, Sie verwenden
VScode
.ng serve
VScode
.ändern).
ng build
mit--aot
Wenn Sie möchten, können Sie das gleiche tun Prozess zum verschieben von Ordnern zurück zum ursprünglichen Speicherort.
Auch, nachdem ich das problem behoben überprüft die
git diff
und erkannte, dass das problem war das Gehäuse. Ich habe die Ordner-Namen in Großbuchstaben, aber das hat sich nicht aktualisiert, in den Weg.