Fehler: Mehr als ein Modul stimmt überein. Verwenden Sie die Option zum Überspringen des Imports, um den Import der Komponente in das nächstgelegene Modul zu überspringen

316

Wenn ich versuche, eine Komponente in der Winkel-CLI zu erstellen, wird mir dieser Fehler angezeigt. Wie werde ich es los?

Fehler: Mehr als ein Modul stimmt überein. Verwenden Sie die Option zum Überspringen des Imports, um den Import der Komponente in das nächstgelegene Modul zu überspringen.

Ich verwende Angular Cli Version: 1.4.1

Ish Man
quelle

Antworten:

690

Geben Sie das Modul mit dem Parameter --module an. Wenn das Hauptmodul beispielsweise app.module.ts lautet, führen Sie Folgendes aus:

ng g c new-component --module app

Oder wenn Sie sich in einem anderen Verzeichnis befinden

ng g c component-name --module ../
Zisha
quelle
23
in meinem Fall war es ng g c admin/manageUsers ---module ../app
Alexus1024
In meinem Fall musste ich sicherstellen, dass ich mich dabei im App-Ordner befand
tree_are_great
80

Versuchen Sie dies: Es funktioniert für mich

ng generate component componentName --module=app.module

Shurvir Mori
quelle
1
Funktioniert bei mir. Vielen Dank. [Angular CLI: 1.7.4 // Knoten: 9.8.0 // Betriebssystem: Linux x64 // Angular: 5.2.9]
NajlaBioinfo
53

Dies ist darauf zurückzuführen, dass die Generation versucht hat, Ihre Komponente einem Modul hinzuzufügen, dh diese Zeile hinzuzufügen

import { MyComponent } from './Components/my-component/my-component.component';

aber es wurden 2 Module gefunden.

Wie hier angegeben , haben sie es in einer Situation behoben, in der es Ihnen gut geht, solange Sie im Stammordner src / app nur 1 Modul haben. Verschieben Sie die sekundären Module einfach in einen Unterordner.

Ansonsten muss man verwenden --module

Bresleveloper
quelle
9
Dies scheint die nützlichste Antwort zu sein, da Sie das Modul nicht ständig angeben müssen, danke.
Arwin
Ja. Meine zusätzlichen Module wurden in einen modulesUnterordner verschoben , und jetzt ist alles in Ordnung.
Crush
1
Vielen Dank für die Erinnerung, endlich fand ich das zweite Modul: RoutingModule und verschob es in den Unterordner
Zheng Kai
36

Es funktioniert für mich

ng g component component-name --skip-import
Valera Khomchenko
quelle
7
Eine wichtige Sache zu beachten ist, dass diese Methode diese Komponenten nicht automatisch in die Datei app.module.ts importiert. Dies muss also manuell erfolgen.
Gel
11

Nur ein kleines Update zu Zishas Antwort.

In meinem Projekt wurden alle Module in einem Ordner namens "modules" abgelegt, und alle Komponenten wurden im Ordner "components" unter "src / app" abgelegt.

Ordnerstruktur

Um eine Komponente unter einem bestimmten Pfad zu erstellen, habe ich die folgende Syntax verwendet:

ng gc Komponentenpfad / Komponentenname - Modul Module_Pfad / Modulname

Beispiel:

ng gc Komponenten / Login - Modul Module / App

Saleem Khan
quelle
1
Ich weiß nicht, aber ist es nicht eine "bessere" Konstruktionspraxis, Ihre Komponenten in den zugehörigen Modulen zu platzieren?
Ojonugwa Jude Ochalifu
8

Angular CLI: 6.0.8
Knoten: 10.4.0
Betriebssystem: Linux x64
Angular: 6.0.4

Falls sich ein Funktionsmodul (z. B. manager.module.ts im Unterordner "/ manager") befindet und das Routingmodul in das separate NgModule (z. B. manager-routing.module.ts ) ausgelagert ist, wird die folgende Fehlermeldung angezeigt :

Es stimmt mehr als ein Modul überein. Verwenden Sie die Option zum Überspringen des Imports, um den Import der Komponente in das nächstgelegene Modul zu überspringen.

wird nicht angezeigt und die Komponente wird ordnungsgemäß generiert und dem Modul manager.module.ts hinzugefügt .

ABER ACHTUNG der Namenskonvention! Der Name des Routing-Moduls muss mit " -routing " enden !

Wenn dem Routingmodul ein Name wie z. B. manager-router.module.ts zugewiesen wird, beschwert sich die CLI mit der Fehlermeldung und erwartet, dass Sie die Option --module angeben, um den Komponentenimport automatisch hinzuzufügen:

ng generate component some-name --module=manager.module.ts

oder

ng generate component some-name --skip-import

Wenn Sie den Import der Komponente lieber manuell hinzufügen möchten

pchemeque
quelle
Das -hat den Trick gemacht! Ich hatte lib-name.routing.module.tsstatt lib-name-routing.module.ts.
Mvermand
7

Es gibt zwei Möglichkeiten, um dieses Problem zu lösen.

1) Überspringen Sie (mit dem Befehl --skip-import in) den Standardimport und erstellen Sie eine Komponente. Sobald die Komponente erstellt wurde, importieren Sie sie manuell, wo immer Sie sie verwenden möchten.

ng generate component my-component --skip-import

2) Geben Sie den Modulnamen explizit dort an, wo er importiert werden soll

ng generate  component  my-component --module=my-module.module
UniCoder
quelle
4

Wenn App oder Lib mehrere verschachtelte Module haben

myApp
  > src
    > app
      app.module.ts
      > routes
        > login
          > auth
          login.module.ts

Angular CLI

ng g component routes/login/auth/my-auth --module=routes/login/login.module.ts 

NRWL NX Angular CLI

ng g component routes/login/auth/my-auth --project=myApp --module=routes/login/login.module.ts

Ergebnis

myApp
  > src
    > app
      app.module.ts
      > routes
        > login
          > auth
            > my-auth
              my-auth.component.ts etc...
          login.module.ts
SoEzPz
quelle
3

Beim Versuch, eine neue Komponente unter einem Ordner zu erstellen, wurde der folgende Fehler angezeigt.

Fehler: Mehr als ein Modul stimmt überein. Verwenden Sie die Option zum Überspringen des Imports, um den Import der Komponente in das nächstgelegene Modul zu überspringen.

Ich habe den folgenden Befehl verwendet und eine neue Komponente wurde erfolgreich unter einem Ordner erstellt.

 ng g c folderName/my_newComponent ---module ../app
Shakeer Hussain
quelle
2

Mein Projekt wurde mit Visual Studio Community 2017 erstellt und erstellt drei separate Module: app.browser.module, app.server.module und app.shared.module

Um meine Komponenten zu erstellen, habe ich die obigen Antworten überprüft und festgestellt, dass mein Modul app.shared.module ist.

Also renne ich:

ng g c componentName --module=app.shared.module
Matheus Maximo
quelle
2

Wenn sich mehr als ein Modul im App-Ordner befindet, schlägt das Generieren einer Komponente mit dem folgenden Befehl fehl:

ng generate component New-Component-Name

Der Grund dafür ist, dass die eckige CLI mehrere Module erkennt und nicht weiß, in welchem ​​Modul die Komponente hinzugefügt werden soll. Sie müssen also explizit angeben, welche Modulkomponente hinzugefügt wird:

ng generate component New-Component-Name --module=ModuleName
Palash Roy
quelle
1

Wenn Sie in einem bestimmten Modul erstellen, gehen Sie zu diesem Pfad und führen Sie ng gc Komponentenname aus

sonst erst Modul erstellen ng g Modul Modulname

cd arc / app / modulename Gehen Sie zum Pfad modulename und erstellen Sie die Komponente

Rohithd
quelle
0

versuchen Sie ng g Komponenten-Header - Modul-App, es ist Arbeit für mich

Istvan Dembrovszky
quelle
1
Arbeiten in Winkel 6. zog ich die Routen app.routing.module.tsdaher den Fehler
Lernen ...
0

Wenn Sie mehr als ein Modul haben, müssen Sie den Modulnamen angeben

 ng g c componentName --module=modulename.module 
priya_21
quelle
0

Angular CLI: 8.3.1

Wenn Sie mehrere module.tsDateien in einem Modul haben, müssen Sie angeben, für welche Moduldatei Sie eine Komponente generieren.

ng g c modulefolder/componentname --module=modulename.module

Zum Beispiel habe ich einen freigegebenen Modulordner, in dem ich diesen habe shared.module.tsund material.module.tsmag

shared
  > shared.module.ts
  > material.module.ts

und ich möchte sidebarKomponente für generieren, shared.module.ts dann werde ich folgenden Befehl ausführen

ng g c shared/sidebar --module=shared.module

Wenn Sie die Komponente exportieren möchten, führen Sie den folgenden Befehl aus

ng g c shared/sidebar --module=shared.module --export
Zuber
quelle
0

Angular CLI: 8.3.4 Node: 10.16.3 Angualr: 4.2.5

Ich habe den Befehl "dotnet new angle" verwendet , um das Projekt zu generieren, und es wurden 3 verschiedene Module im App-Ordner generiert (obwohl ein einfacher Test mit ng new project-name nur ein einziges Modul generiert.

Sehen Sie sich die Module in Ihrem Projekt an und entscheiden Sie, welches Modul Sie möchten. Geben Sie dann den Namen an

ng g c componentName --module=[name-of-your-module]

Weitere Informationen zu Modulen finden Sie hier: https://angular.io/guide/architecture-modules

Homa Pourmohammadi
quelle
0

In meinem Fall scheint ng nicht in meinem Umgebungspfad registriert zu sein. Ich habe den Befehl npm run verwendet, um die ng-Befehle auszuführen. Beachten Sie, dass Sie zum Übergeben von Argumenten ein Extra benötigen - gemäß der npm-Laufspezifikation.

Beispiel: npm run ng gc components / scheduling - --module = app

Oder: npm run ng gc components / scheduling - --skip-import

Scott Moniz
quelle
0

Ich hatte diese Warnung, als ich diese in der angular.jsonKonfiguration hatte:

"prefix": "app_ng"

Wenn geändert, "app"funktionierte alles einwandfrei.

Valera Tumash
quelle
0

Nur um eine weitere Information für jemanden wie mich hinzuzufügen, der nur eine einzige Anwendung hat.

Ich hatte meine Anwendung mit der Hauptanwendung app.module.ts eingerichtet und hatte das Routing mit dem Routingmodul in einem eigenen Ordner unter der Hauptanwendung. Ich ging durch und räumte auf, da ich ein paar andere Dinge hatte, die besser organisiert werden mussten. Eine Sache, die ich getan habe, war, die Datei routing.module.ts in den Stammordner zu verschieben. Da es die einzige Datei im Ordner war, dachte ich, dass es keinen eigenen Ordner benötigt.

Dies funktionierte zunächst einwandfrei, aber als ich das nächste Mal versuchte, eine neue Komponente zu generieren (einige Zeit später über die WebStorm-IDE), schlug dies mit dieser Nachricht fehl. Nachdem ich dies gelesen hatte, versuchte ich, das Routing-Modul wieder in einen separaten Ordner zu legen, und es funktionierte wieder.

Beachten Sie also die Warnung an andere, verschieben Sie das Routing-Modul nicht in Ihren Stammordner! Ich bin mir sicher, dass es auch andere Möglichkeiten gibt, damit umzugehen, aber ich bin damit zufrieden, dass ich es jetzt in einem eigenen Ordner habe und den IDE-Generator wie zuvor verwende.

sfaust
quelle
0

Sie müssen den angegebenen Modulnamen wie angeben

ng g c your-component --module module-name

Wo module-namesoll das sein, das Sie mit neu erstellter Komponente aktualisieren möchten.

Frau KV
quelle
-1

Als Hack, unten Schritte, für mich gearbeitet.

1) Verschieben Sie * .module.ts-Dateien von src / app an einen Speicherort außerhalb des Projekts.

2) Führen Sie den Befehl aus, um eine Komponente zu erstellen [ng g c component-name]

3) Verschieben Sie die * .module.ts-Dateien zurück nach src / app /

Anoop Mayampilly Muraleedharan
quelle
Überprüfen Sie bei dieser Lösung, ob die Komponente auch im entsprechenden Modul registriert ist. Das Ausführen des Befehls mit der CLI sollte dies tun. Ich denke, der negative Punkt war auf dieses Problem zurückzuführen.
Homa Pourmohammadi