Error: más de un módulo coincide. Use la opción de omitir importación para omitir la importación del componente al módulo más cercano

317

Cuando intento crear un componente en el cli angular, me muestra este error. Como me deshago de esto ?

Error: más de un módulo coincide. Utilice la opción de omisión de importación para omitir la importación del componente al módulo más cercano.

Estoy usando la versión angular de cli: 1.4.1

Ish Man
fuente

Respuestas:

691

Especifique el módulo usando el parámetro --module. Por ejemplo, si el módulo principal es app.module.ts, ejecute esto:

ng g c new-component --module app

O si estás en otro directorio entonces

ng g c component-name --module ../
zisha
fuente
23
en mi caso fue ng g c admin/manageUsers ---module ../app
Alexus1024
en mi caso tenía que asegurarme de que estaba en la carpeta de la aplicación cuando lo hacía
trees_are_great
80

Prueba esto: está funcionando para mí

ng generate component componentName --module=app.module

Shurvir Mori
fuente
1
Funciona para mi. Gracias. [CLI angular: 1.7.4 // Nodo: 9.8.0 // OS: linux x64 // Angular: 5.2.9]
NajlaBioinfo
53

Esto se debe a que la generación intentó agregar su componente a un módulo, es decir, agregar esta línea

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

pero encontró 2 módulos.

Como se indicó aquí , lo arreglaron en una situación en la que, en la carpeta raíz src / app, solo tiene 1 módulo, está bien, así que simplemente mueva los módulos secundarios a una subcarpeta.

De lo contrario, tienes que usar --module

bresleveloper
fuente
99
Esta parece ser la respuesta más útil, evitando tener que especificar el módulo todo el tiempo, gracias.
Arwin
Sí. Moví mis módulos adicionales a una modulessubcarpeta, y todo está bien ahora.
aplastar
1
Gracias por recordar, finalmente encontré el segundo módulo: RoutingModule, y lo moví a la subcarpeta
Zheng Kai
36

Me esta funcionando

ng g component component-name --skip-import
Valera Khomchenko
fuente
77
Una cosa importante a tener en cuenta es que este método no importa automáticamente estos componentes en app.module.ts. Entonces esto tiene que hacerse manualmente.
Gel
11

Solo una pequeña actualización de la respuesta de Zisha.

En mi proyecto, todos los módulos se colocaron en una carpeta llamada "módulos" y todos los componentes se colocaron en la carpeta "componentes" en "src / app"

estructura de carpetas

así que para crear un componente bajo una ruta específica, utilicé la siguiente sintaxis:

ng gc components_path / component_name --module modules_path / module_name

ejemplo:

ng gc components / login --módulos de módulos / aplicación

Saleem Khan
fuente
1
No sé, pero, no es una 'práctica mejor diseño para colocar sus componentes en sus módulos asociados?
Ojonugwa Jude Ochalifu
8

CLI angular: 6.0.8
Nodo: 10.4.0
SO: linux x64
Angular: 6.0.4

En caso de que haya un módulo de características (por ejemplo, manager.module.ts dentro de la subcarpeta "/ manager") con el módulo de enrutamiento externo en el NgModule separado (por ejemplo, manager-routing.module.ts ), el mensaje de error:

Más de un módulo coincide. Utilice la opción de omisión de importación para omitir la importación del componente al módulo más cercano.

no aparece y el componente se genera y agrega correctamente al módulo manager.module.ts .

¡PERO TEN CUIDADO la convención de nombres! ¡el nombre del módulo de enrutamiento debe terminar con " -enrutamiento "!

Si el módulo de enrutamiento recibe un nombre como, por ejemplo, manager-router.module.ts , la CLI se quejará con el mensaje de error y esperará que proporcione la opción --module para agregar automáticamente la importación del componente:

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

o

ng generate component some-name --skip-import

si prefiere agregar la importación del componente manualmente

pchemeque
fuente
El -hizo el truco! Tenía en lib-name.routing.module.tslugar de lib-name-routing.module.ts.
mvermand
7

Hay dos formas de resolver este problema.

1) Omita (usando --skip-import en el comando) importar y crear componente por defecto y una vez que se crea el componente, impórtelo manualmente donde quiera que lo use.

ng generate component my-component --skip-import

2) Proporcione el nombre del módulo explícitamente donde desea que se importe

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

Cuando la aplicación o lib tienen múltiples módulos anidados

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

CLI angular

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

NRWL NX CLI angular

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

Resultado

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

Obtuve el siguiente error al intentar crear un nuevo componente en una carpeta.

error: más de un módulo coincide. Utilice la opción de omisión de importación para omitir la importación del componente al módulo más cercano.

He usado el siguiente comando y el nuevo componente se creó con éxito en una carpeta.

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

Mi proyecto fue creado usando Visual Studio Community 2017 y crea 3 módulos separados: app.browser.module, app.server.module y app.shared.module

Para crear mis componentes, verifiqué las respuestas anteriores y encontré que mi módulo era app.shared.module.

Entonces, corro:

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

Cuando hay más de un módulo en la carpeta de la aplicación, generará un componente con el siguiente comando fallará:

ng generate component New-Component-Name

La razón es que la CLI angular detecta múltiples módulos y no sabe en qué módulo agregar el componente. Por lo tanto, debe mencionar explícitamente qué componente del módulo se agregará:

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

si está creando en un módulo específico, vaya a esa ruta y ejecute ng gc componentname

de lo contrario, cree el módulo primero ng g module modulename

cd arc / app / modulename ir a la ruta del nombre del módulo y crear el componente

rohithd
fuente
0

intente ng g header de componente - aplicación de módulo es trabajo para mí

Istvan Dembrovszky
fuente
1
funciona en angular 6. Moví las rutas a app.routing.module.tspor lo tanto el error
aprendizaje ...
0

cuando tiene más de un módulo, debe especificar el nombre del módulo

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

CLI angular: 8.3.1

cuando tiene varios module.tsarchivos dentro de un módulo, debe especificar para qué archivo de módulo está generando el componente.

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

por ejemplo, he compartido la carpeta del módulo dentro de la cual tengo shared.module.tsy me material.module.tsgusta esto

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

y quiero generar un sidebarcomponente para shared.module.ts luego ejecutaré el siguiente comando

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

si desea exportar el componente, ejecute el siguiente comando

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

CLI angular: 8.3.4 Nodo: 10.16.3 Angualr: 4.2.5

Utilicé el comando "dotnet new angular" para generar el proyecto, y ha generado 3 módulos diferentes en la carpeta de la aplicación (aunque una prueba simple con ng nuevo nombre de proyecto solo genera un solo módulo.

vea los módulos en su proyecto y decida qué módulo desea, luego especifique el nombre

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

Puede leer más sobre los módulos aquí: https://angular.io/guide/architecture-modules

Homa Pourmohammadi
fuente
0

En mi caso, parece que ng no está registrado en la ruta de mi entorno. He estado usando el comando npm run para ejecutar los comandos ng. Tenga en cuenta para pasar argumentos necesita un extra, según la especificación de ejecución npm.

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

O: npm ejecutar ng componentes / programación de gc - --skip-import

Scott Moniz
fuente
0

Tuve esta advertencia cuando tuve esto en angular.jsonconfig:

"prefix": "app_ng"

Cuando se cambió a "app"todo funcionó perfectamente bien.

Valera Tumash
fuente
0

Solo para agregar otra información a esto para cualquier persona como yo que tenga una sola aplicación.

Tenía mi aplicación configurada con app.module.ts principal y tenía enrutamiento con el módulo de enrutamiento en su propia carpeta debajo de la aplicación principal. Revisé e hice algunas 'limpiezas' ya que tenía algunas otras cosas que debían organizarse mejor. Una cosa que hice fue mover el routing.module.ts a la carpeta raíz; Como era el único archivo en la carpeta, pensé que no necesitaba su propia carpeta.

Esto funcionó bien al principio, pero la próxima vez que intenté generar un nuevo componente (algún tiempo después, a través del IDE de WebStorm) falló con este mensaje. Después de leer esto, intenté volver a colocar el módulo de enrutamiento en una carpeta separada y funcionó nuevamente.

Entonces, tenga en cuenta la advertencia a los demás, ¡no mueva el módulo de enrutamiento a su carpeta raíz! Estoy seguro de que también hay otras formas de lidiar con esto, pero estoy contento con eso en su propia carpeta por ahora y usando el generador IDE como lo estaba anteriormente.

sfaust
fuente
0

Tienes que dar el nombre del módulo específico como

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

¿Dónde module-namedebería estar que desea actualizar con el componente recién creado?

Ms.KV
fuente
-1

Como truco, debajo de los pasos, funcionó para mí.

1) Mueva los archivos * .module.ts de src / app a una ubicación fuera del proyecto.

2) Ejecutar comando para crear componente [ng g c component-name]

3) Mueva hacia atrás los archivos * .module.ts a src / app /

Anoop Mayampilly Muraleedharan
fuente
Para esta solución, verifique si el componente también está registrado en el módulo correspondiente. Ejecutar el comando usando el cli debería hacerlo. Supongo que el punto negativo ha sido por este problema.
Homa Pourmohammadi