Erreur: plusieurs modules correspondent. Utilisez l'option skip-import pour ignorer l'importation du composant dans le module le plus proche


317

Lorsque j'essaie de créer un composant dans le cli angulaire, cela me montre cette erreur. Comment m'en débarrasser?

Erreur: plusieurs modules correspondent. Utilisez l'option skip-import pour ignorer l'importation du composant dans le module le plus proche.

J'utilise la version angular cli: 1.4.1

Réponses:


691

Spécifiez le module à l'aide du paramètre --module. Par exemple, si le module principal est app.module.ts, exécutez ceci:

ng g c new-component --module app

Ou si vous êtes dans un autre répertoire,

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

23
dans mon cas c'était ng g c admin/manageUsers ---module ../app
Alexus1024

dans mon cas, je devais m'assurer que j'étais dans le dossier de l'application en le faisant
trees_are_great

80

Essayez ceci: cela fonctionne pour moi

ng generate component componentName --module=app.module


1
Travaille pour moi. THX. [Angular CLI: 1.7.4 // Node: 9.8.0 // OS: linux x64 // Angular: 5.2.9]
NajlaBioinfo

53

Cela est dû au fait que la génération a essayé d'ajouter votre composant à un module, c'est-à-dire d'ajouter cette ligne

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

mais il a trouvé 2 modules.

Comme indiqué ici , ils l'ont corrigé à une situation où tant que dans le dossier racine src / app vous n'avez qu'un seul module, vous allez bien, alors déplacez simplement les modules secondaires vers un sous-dossier.

Sinon, vous devez utiliser --module


9
Cela semble la réponse la plus utile, vous évitant d'avoir à spécifier le module tout le temps, merci.
Arwin

Oui. Déplacé mes modules supplémentaires dans un modulessous - dossier, et tout va bien maintenant.
écraser le

1
Merci pour le rappel, j'ai finalement trouvé le deuxième module: RoutingModule, et l'ai déplacé vers le sous-dossier
Zheng Kai

36

Ça marche pour moi

ng g component component-name --skip-import

7
une chose importante à noter est que cette méthode n'importe pas automatiquement ces composants dans app.module.ts. Cela doit donc être fait manuellement.
Gel

11

Juste une petite mise à jour de la réponse de Zisha.

Dans mon projet, tous les modules ont été placés dans un dossier appelé "modules" et tous les composants sont placés dans le dossier "composants" sous "src / app"

structure des dossiers

donc pour créer un composant sous un chemin spécifique, j'ai utilisé la syntaxe suivante:

ng gc components_path / component_name --module modules_path / module_name

exemple :

ng gc components / login --module modules / app


1
Je ne sais pas, mais, n'est-ce pas une "meilleure" pratique de conception pour placer vos composants dans leurs modules connexes?
Ojonugwa Jude Ochalifu

8

CLI angulaire: 6.0.8
Nœud: 10.4.0
OS: linux x64
Angulaire: 6.0.4

Dans le cas où il y a un module de fonctionnalité (par exemple manager.module.ts à l'intérieur du sous-dossier par exemple "/ manager") avec le module de routage externalisé dans le NgModule séparé (par exemple manager-routing.module.ts ), le message d'erreur:

Plus d'un module correspond. Utilisez l'option skip-import pour ignorer l'importation du composant dans le module le plus proche.

n'apparaît pas et le composant est correctement généré et ajouté au module manager.module.ts .

MAIS ATTENTION à la convention de dénomination! le nom du module de routage doit se terminer par " -routing "!

Si le module de routage reçoit un nom tel que par exemple manager-router.module.ts , CLI se plaindra du message d'erreur et s'attendra à ce que vous fournissiez l'option --module pour ajouter automatiquement l'importation de composants:

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

ou

ng generate component some-name --skip-import

si vous préférez ajouter l'importation du composant manuellement


Ils ont -fait l'affaire! J'avais lib-name.routing.module.tsau lieu de lib-name-routing.module.ts.
mvermand

7

Il existe deux façons de résoudre ce problème.

1) Ignorez (en utilisant --skip-import dans la commande) l'import par défaut et créez un composant et une fois le composant créé, importez-le manuellement où vous voulez l'utiliser.

ng generate component my-component --skip-import

2) Indiquez explicitement le nom du module à l'endroit où vous souhaitez l'importer

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

4

Lorsque app ou lib ont plusieurs modules imbriqués

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

CLI angulaire

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

CLI angulaire NRWL NX

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

Résultat

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

3

J'obtenais une erreur en dessous lorsque j'essayais de créer un nouveau composant sous un dossier.

erreur: plusieurs modules correspondent. Utilisez l'option skip-import pour ignorer l'importation du composant dans le module le plus proche.

J'ai utilisé la commande ci-dessous et un nouveau composant a été créé avec succès sous un dossier.

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

2

Mon projet a été créé à l'aide de Visual Studio Community 2017 et il crée 3 modules séparés: app.browser.module, app.server.module et app.shared.module

Afin de créer mes composants, j'ai vérifié les réponses ci-dessus et trouvé que mon module était app.shared.module.

Alors je lance:

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

2

Lorsqu'il y a plus d'un module sous le dossier d'application, la génération d'un composant avec la commande ci-dessous échouera:

ng generate component New-Component-Name

La raison en est que la CLI angulaire détecte plusieurs modules et ne sait pas dans quel module ajouter le composant. Donc, vous devez mentionner explicitement quel composant de module sera ajouté:

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

1

si vous créez dans un module spécifique, allez sur ce chemin et exécutez ng gc componentname

sinon créer le premier module ng g module nom du module

cd arc / app / modulename aller au chemin modulename et créer le composant


0

essayez l'en-tête du composant ng - application de module, cela fonctionne pour moi


1
fonctionne en angulaire 6. J'ai déplacé les routes d' app.routing.module.tsoù l'erreur
apprentissage ...

0

lorsque vous avez plusieurs modules, vous devez spécifier le nom du module

 ng g c componentName --module=modulename.module 

0

CLI angulaire: 8.3.1

lorsque vous avez plusieurs module.tsfichiers dans un module, vous devez spécifier pour quel fichier de module vous générez le composant.

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

par exemple, j'ai partagé le dossier du module dans lequel j'ai shared.module.tset material.module.tscomme ça

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

et je veux générer un sidebarcomposant pour shared.module.ts ensuite je vais exécuter la commande suivante

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

si vous souhaitez exporter le composant, exécutez la commande suivante

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

0

CLI angulaire: 8.3.4 Nœud: 10.16.3 Angualr: 4.2.5

J'ai utilisé la commande "dotnet new angular" pour générer le projet, et il a généré 3 modules différents dans le dossier de l'application (bien qu'un test simple avec ng nouveau nom de projet) génère juste un seul module.

voir les modules dans votre projet et décider quel module vous voulez - puis spécifiez le nom

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

Vous pouvez en savoir plus sur les modules ici: https://angular.io/guide/architecture-modules


0

Dans mon cas, il semble que ng ne soit pas enregistré dans mon chemin d'accès à l'environnement. J'utilise la commande npm run pour exécuter les commandes ng. Soyez conscient afin de passer des arguments dont vous avez besoin d'un supplément - selon la spécification d'exécution npm.

Exemple: npm exécuter ng gc composants / ordonnancement - --module = app

Ou: npm exécuter ng gc components / scheduling - --skip-import


0

J'ai eu cet avertissement quand j'ai eu ceci dans la angular.jsonconfiguration:

"prefix": "app_ng"

Une fois changé pour "app"tout fonctionnait parfaitement bien.


0

Juste pour ajouter une autre information à toute personne comme moi qui arrive le long d'une seule application.

J'ai eu mon application configurée avec le principal app.module.ts et j'ai eu le routage avec le module de routage dans son propre dossier sous l'application principale. J'ai traversé et fait un peu de «nettoyage» car j'avais quelques autres choses qui devaient être mieux organisées. Une chose que j'ai faite a été de déplacer le routing.module.ts vers le dossier racine; comme c'était le seul fichier du dossier, je pensais qu'il n'avait pas besoin de son propre dossier.

Cela a bien fonctionné au début, mais la prochaine fois que j'ai essayé de générer un nouveau composant (quelque temps plus tard, via l'IDE WebStorm), il a échoué avec ce message. Après avoir lu cela, j'ai essayé de remettre le module de routage dans un dossier séparé et cela a fonctionné à nouveau.

Alors attention aux autres, ne déplacez pas le module de routage dans votre dossier racine! Je suis sûr qu'il y a d'autres façons de gérer cela aussi, mais j'en suis satisfait dans son propre dossier pour l'instant et j'utilise le générateur IDE comme je l'étais auparavant.


0

Vous devez donner le nom de module spécifié comme

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

module-namedevriez-vous mettre à jour avec le composant nouvellement créé.


-1

Comme un hack, en dessous des étapes, a fonctionné pour moi.

1) Déplacez les fichiers * .module.ts de src / app vers un emplacement hors du projet.

2) Exécuter la commande pour créer un composant [ng g c component-name]

3) Reculez les fichiers * .module.ts vers src / app /


Pour cette solution, vérifiez si le composant est également enregistré dans le module correspondant. L'exécution de la commande à l'aide du cli devrait le faire. Je suppose que le point négatif est dû à ce problème.
Homa Pourmohammadi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.