Errore: più di un modulo corrisponde. Utilizzare l'opzione skip-import per saltare l'importazione del componente nel modulo più vicino


317

Quando provo a creare un componente nel cli angolare, mi mostra questo errore. Come posso liberarmene?

Errore: più di un modulo corrisponde. Utilizzare l'opzione skip-import per saltare l'importazione del componente nel modulo più vicino.

Sto usando la versione angular cli: 1.4.1

Risposte:


691

Specificare il modulo usando il parametro --module. Ad esempio, se il modulo principale è app.module.ts, eseguire questo:

ng g c new-component --module app

O se ti trovi in ​​un'altra directory allora

ng g c component-name --module ../

23
nel mio caso lo era ng g c admin/manageUsers ---module ../app
Alexus1024

nel mio caso ho dovuto assicurarmi di essere nella cartella dell'app quando lo facevo
trees_are_great

80

Prova questo: funziona per me

ng generate component componentName --module=app.module


1
Per me va bene. Grazie. [CLI angolare: 1.7.4 // Nodo: 9.8.0 // OS: linux x64 // Angular: 5.2.9]
NajlaBioinfo

53

Ciò è causato dal momento che la generazione ha tentato di aggiungere il componente a un modulo, ovvero di aggiungere questa riga

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

ma ha trovato 2 moduli.

Come indicato qui , l'hanno risolto in una situazione in cui fino a quando nella cartella root src / app hai solo 1 modulo, stai bene, quindi sposta i moduli secondari in una sottocartella.

Altrimenti devi usare --module


9
Questa sembra la risposta più utile, risparmiandoti di dover specificare il modulo in ogni momento, grazie.
Arwin,

Sì. Ho spostato i miei moduli aggiuntivi in ​​una modulessottocartella e ora tutto è a posto.
schiaccia

1
Grazie per ricordare, finalmente ho trovato il secondo modulo: RoutingModule e l'ho spostato nella sottocartella
Zheng Kai il

36

Funziona per me

ng g component component-name --skip-import

7
una cosa importante da notare è che questo metodo non importa automaticamente questi componenti in app.module.ts. Quindi questo deve essere fatto manualmente.
Gel

11

Solo un piccolo aggiornamento alla risposta di Zisha.

Nel mio progetto tutti i moduli sono stati collocati in una cartella denominata "moduli" e tutti i componenti sono collocati nella cartella "componenti" sotto "src / app"

struttura delle cartelle

quindi per creare un componente in un percorso specifico, ho usato la sintassi seguente:

di gc componenti_percorso / nome_componente - modulo moduli_percorso / nome_modulo

esempio :

di componenti gc / login - moduli moduli / app


1
Non so, ma non è una pratica di progettazione "migliore" posizionare i componenti nei loro moduli correlati?
Ojonugwa Jude Ochalifu,

8

CLI angolare: 6.0.8
Nodo: 10.4.0
OS: linux x64
Angolare: 6.0.4

Nel caso in cui sia presente un modulo funzione (ad es . Manager.module.ts all'interno della sottocartella ad es . "/ Manager") con il modulo di routing esternalizzato nel NgModule separato (ad es. Manager-routing.module.ts ) il messaggio di errore:

Più di un modulo corrisponde. Utilizzare l'opzione skip-import per saltare l'importazione del componente nel modulo più vicino.

non viene visualizzato e il componente viene generato e aggiunto correttamente al modulo manager.module.ts .

MA ATTENZIONE, la convenzione di denominazione! il nome del modulo di routing deve terminare con " -routing "!

Se al modulo di routing viene assegnato un nome come ad esempio manager-router.module.ts , l' interfaccia della riga di comando si lamenterà del messaggio di errore e si aspetterà che l'utente fornisca l'opzione --module per aggiungere automaticamente l'importazione del componente:

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

o

ng generate component some-name --skip-import

se si preferisce aggiungere manualmente l'importazione del componente


Lo ha -fatto il trucco! Ho avuto lib-name.routing.module.tsinvece di lib-name-routing.module.ts.
mvermand

7

Esistono due modi per risolvere questo problema.

1) Salta (usando --skip-import nel comando) importazione e creazione predefinite del componente e una volta creato il componente importalo manualmente ovunque tu voglia usarlo.

ng generate component my-component --skip-import

2) Fornire esplicitamente il nome del modulo nel punto in cui si desidera importarlo

ng generate  component  my-component --module=my-module.module

4

Quando app o lib hanno più moduli nidificati

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

CLI angolare

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

Risultato

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

3

Stavo ottenendo un errore di seguito quando provavo a creare un nuovo componente in una cartella.

errore: più di un modulo corrisponde. Utilizzare l'opzione skip-import per saltare l'importazione del componente nel modulo più vicino.

Ho usato il comando seguente e il nuovo componente è stato creato correttamente in una cartella.

 ng g c folderName/my_newComponent ---module ../app

2

Il mio progetto è stato creato utilizzando Visual Studio Community 2017 e crea 3 moduli separati: app.browser.module, app.server.module e app.shared.module

Per creare i miei componenti ho controllato le risposte sopra e ho trovato il mio modulo come app.shared.module.

Quindi, corro:

ng g c componentName --module=app.shared.module

2

Quando è presente più di un modulo nella cartella dell'app, la generazione di un componente con il comando seguente non riuscirà:

ng generate component New-Component-Name

Il motivo è che la CLI angolare rileva più moduli e non sa in quale modulo aggiungere il componente. Quindi, è necessario menzionare esplicitamente quale componente del modulo verrà aggiunto:

ng generate component New-Component-Name --module=ModuleName

1

se stai creando in un modulo specifico vai su quel percorso ed esegui ng gc nome componente

altrimenti crea prima il modulo ng modulo modulename

cd arc / app / nome_modulo andare al percorso del nome_modulo e creare il componente


0

prova l'intestazione del componente g - l'app per i moduli, funziona per me


1
funziona in angolare 6. Ho spostato i percorsi verso app.routing.module.tsquindi l'errore
apprendimento ...

0

quando hai più di un modulo, devi specificare il nome del modulo

 ng g c componentName --module=modulename.module 

0

CLI angolare: 8.3.1

quando sono presenti più module.tsfile all'interno di un modulo, è necessario specificare per quale file del modulo si sta generando il componente.

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

per esempio ho una cartella di moduli condivisa all'interno della quale ho shared.module.tse mi material.module.tspiace

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

e voglio generare sidebarcomponente per shared.module.ts poi eseguirò il seguente comando

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

se si desidera esportare il componente, eseguire il comando seguente

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

0

CLI angolare: 8.3.4 Nodo: 10.16.3 Angualr: 4.2.5

Ho usato il comando "dotnet new angular" per generare il progetto e ha generato 3 diversi moduli nella cartella dell'app (anche se un semplice test con ng nuovo nome-progetto genera solo un singolo modulo.

vedere i moduli nel progetto e decidere quale modulo si desidera, quindi specificare il nome

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

Puoi leggere di più sui moduli qui: https://angular.io/guide/architecture-modules


0

Nel mio caso, sembra che ng non sia registrato nel mio percorso di ambiente. Ho usato il comando npm run per eseguire i comandi ng. Prestare attenzione al fine di passare argomenti di cui è necessario un extra, come da specifica npm run.

Esempio: npm esegue ng componenti / pianificazione gc - --module = app

Oppure: npm esegue ng componenti / pianificazione gc - --skip-import


0

Ho avuto questo avviso quando questo era in angular.jsonconfig:

"prefix": "app_ng"

Quando cambiato in "app"tutto ha funzionato perfettamente bene.


0

Solo per aggiungere un'altra informazione a questo per chiunque come me che succede lungo che ha solo una singola applicazione.

Avevo configurato la mia applicazione con l'app.module.ts principale e avevo il routing con il modulo di routing nella sua cartella sotto l'applicazione principale. Sono passato e ho fatto un po 'di "pulizia" poiché avevo alcune altre cose che dovevano essere organizzate meglio. Una cosa che ho fatto è stato spostare routing.module.ts nella cartella principale; dato che era l'unico file nella cartella, ho pensato che non avesse bisogno della sua cartella.

Inizialmente ha funzionato bene, ma la prossima volta che ho provato a generare un nuovo componente (qualche tempo dopo, tramite l'IDE WebStorm) non è riuscito con questo messaggio. Dopo aver letto questo ho provato a rimettere il modulo di routing in una cartella separata e ha funzionato di nuovo.

Quindi nota di avvertimento per gli altri, non spostare il modulo di routing nella cartella principale! Sono sicuro che ci sono anche altri modi per gestirlo, ma per ora sono contento nella sua cartella e usando il generatore IDE come in precedenza.


0

Devi dare il nome del modulo specificato come

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

Dove module-namedovrebbe essere che si desidera aggiornare con il componente appena creato.


-1

Come hack, sotto i passaggi, ha funzionato per me.

1) Spostare i file * .module.ts da src / app in una posizione fuori dal progetto.

2) Eseguire il comando per creare il componente [ng g c component-name]

3) Spostare indietro i file * .module.ts su src / app /


Per questa soluzione, verificare se il componente è registrato anche nel modulo pertinente. L'esecuzione del comando utilizzando il cli dovrebbe farlo. Immagino che il punto negativo sia stato a causa di questo problema.
Homa Pourmohammadi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.