Erro: Mais de um módulo corresponde. Use a opção skip-import para pular a importação do componente para o módulo mais próximo

317

Quando tento criar um componente no CLI angular, ele está me mostrando esse erro. Como faço para me livrar dele ?

Erro: Mais de um módulo corresponde. Use a opção skip-import para pular a importação do componente para o módulo mais próximo.

Estou usando a versão angular do cli: 1.4.1

Ish Man
fonte

Respostas:

691

Especifique o módulo usando o parâmetro --module Por exemplo, se o módulo principal for app.module.ts, execute o seguinte:

ng g c new-component --module app

Ou se você estiver em outro diretório,

ng g c component-name --module ../
zisha
fonte
23
no meu caso, foi # ng g c admin/manageUsers ---module ../app
Alexus1024 18/17/17
no meu caso, eu tinha que ter certeza de que estava na pasta do aplicativo ao fazê-lo
trees_are_great
80

Tente isto: Está funcionando para mim

ng generate component componentName --module=app.module

Shurvir Mori
fonte
1
Funciona para mim. THX. [CLI angular: 1.7.4 // Nó: 9.8.0 // SO: linux x64 // Angular: 5.2.9]
NajlaBioinfo
53

Isso é causado desde que a geração tentou adicionar seu componente a um módulo, ou seja, adicionar esta linha

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

mas encontrou 2 módulos.

Conforme declarado aqui , eles o consertaram em uma situação em que, desde que na pasta raiz src / app você tenha apenas 1 módulo, você esteja bem, então mova os módulos secundários para uma subpasta.

Caso contrário, você tem que usar --module

bresleveloper
fonte
9
Essa parece a resposta mais útil, evitando que você precise especificar o módulo o tempo todo, obrigado.
Arwin
Sim. Movi meus módulos adicionais para uma modulessubpasta, e tudo está bom agora.
esmagar
1
Graças para recordar, finalmente, que o segundo módulo encontrado: RoutingModule, e mudou-se a sub-pasta
Zheng Kai
36

Está funcionando para mim

ng g component component-name --skip-import
Valera Khomchenko
fonte
7
Uma coisa importante a ser observada é que esse método não importa automaticamente esses componentes no app.module.ts. Portanto, isso deve ser feito manualmente.
Gel
11

Apenas uma pequena atualização da resposta de Zisha.

No meu projeto, todos os módulos foram colocados em uma pasta chamada "modules" e todos os componentes foram colocados na pasta "components" em "src / app"

estrutura de pastas

para criar um componente sob um caminho específico, usei a seguinte sintaxe:

ng gc components_path / component_name --module modules_path / module_name

exemplo:

ng gc components / login --module modules / app

Saleem Khan
fonte
1
Eu não sei, mas, não é um "melhor' prática de design para colocar os componentes em seus módulos relacionados?
Ojonugwa Jude Ochalifu
8

CLI angular: 6.0.8
Nó: 10.4.0
SO: linux x64
Angular: 6.0.4

Caso exista um módulo de recurso (por exemplo, manager.module.ts dentro da subpasta "/ manager"), com o módulo de roteamento externalizado no NgModule separado (por exemplo, manager-routing.module.ts ), a mensagem de erro:

Mais de um módulo corresponde. Use a opção skip-import para pular a importação do componente para o módulo mais próximo.

não aparece e o componente é gerado corretamente e incluído no módulo manager.module.ts .

Mas tenha cuidado com a convenção de nomenclatura! o nome do módulo de roteamento deve terminar com " -routing "!

Se o módulo de roteamento receber um nome como, por exemplo, manager-router.module.ts , a CLI se queixará da mensagem de erro e esperará que você forneça a opção --module para adicionar automaticamente a importação do componente:

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

ou

ng generate component some-name --skip-import

se você preferir adicionar a importação do componente manualmente

pchemeque
fonte
O -fez o truque! Eu tinha em lib-name.routing.module.tsvez de lib-name-routing.module.ts.
precisa saber é
7

Existem duas maneiras de resolver esse problema.

1) Pule (usando --skip-import no comando) a importação padrão e crie o componente; assim que o componente for criado, importe-o manualmente, sempre que você quiser usá-lo.

ng generate component my-component --skip-import

2) Forneça explicitamente o nome do módulo para onde você deseja que ele seja importado

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

Quando app ou lib possui vários módulos aninhados

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 Angular CLI

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
fonte
3

Eu estava recebendo o erro abaixo ao tentar criar um novo componente em uma pasta.

erro: Mais de um módulo corresponde. Use a opção skip-import para pular a importação do componente para o módulo mais próximo.

Eu usei o comando abaixo e o novo componente foi criado com êxito em uma pasta.

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

Meu projeto foi criado usando a Comunidade do Visual Studio 2017 e cria 3 módulos separados: app.browser.module, app.server.module e app.shared.module

Para criar meus componentes, verifiquei as respostas acima e achei meu módulo como app.shared.module.

Então, eu corro:

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

Quando houver mais de um módulo na pasta do aplicativo, a geração de um componente com o comando abaixo falhará:

ng generate component New-Component-Name

O motivo é que a CLI angular detecta vários módulos e não sabe em qual módulo adicionar o componente. Portanto, você precisa mencionar explicitamente qual componente do módulo será adicionado:

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

se você estiver criando em um módulo específico, vá para esse caminho e execute ng gc componentname

caso contrário, crie o módulo primeiro ng g módulo nome do módulo

cd arc / app / modulename vá para o caminho do modulename e crie o componente

rohithd
fonte
0

tente ng g cabeçalho componente - aplicativo módulo é trabalho para mim

Istvan Dembrovszky
fonte
1
trabalha em angular 6. Mudei as rotas para, app.routing.module.tsportanto, o erro
aprendendo ...
0

quando você tiver mais de um módulo, precisará especificar o nome do módulo

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

CLI angular: 8.3.1

Quando você possui vários module.tsarquivos dentro de um módulo, precisa especificar para qual arquivo de módulo você está gerando componente.

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

por exemplo, eu tenho pasta módulo compartilhado dentro do qual eu tenho shared.module.tse material.module.tsassim

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

e eu quero gerar sidebarcomponente para shared.module.ts então eu vou executar o seguinte comando

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

se você deseja exportar o componente, execute o seguinte comando

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

CLI angular: 8.3.4 Nó: 10.16.3 Angualr: 4.2.5

Eu usei o comando "dotnet new angular" para gerar o projeto, e ele gerou 3 módulos diferentes na pasta do aplicativo (embora um teste simples com o novo nome do projeto gere apenas um único módulo.

veja os módulos em seu projeto e decida qual módulo você deseja - depois especifique o nome

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

Você pode ler mais sobre os módulos aqui: https://angular.io/guide/architecture-modules

Homa Pourmohammadi
fonte
0

No meu caso, parece que ng não está registrado no caminho do meu ambiente. Eu tenho usado o comando npm run para executar os comandos ng. Esteja ciente de que, para passar argumentos, você precisa de um extra - conforme a especificação de execução do npm.

Exemplo: npm executa componentes / programação do gc - --module = app

Ou: npm executa componentes / programação do gc - --skip-import

Scott Moniz
fonte
0

Eu tive esse aviso quando tinha isso em angular.jsonconfig:

"prefix": "app_ng"

Quando alterado para "app"tudo funcionou perfeitamente bem.

Valera Tumash
fonte
0

Apenas para adicionar outra informação a alguém assim como eu, que acontece com apenas um aplicativo.

Eu configurei meu aplicativo com o app.module.ts principal e fiz o roteamento com o módulo de roteamento em sua própria pasta, no aplicativo principal. Eu passei por isso e fiz algumas 'limpezas', pois tinha algumas outras coisas que precisavam ser melhor organizadas. Uma coisa que fiz foi mover o routing.module.ts para a pasta raiz; já que era o único arquivo na pasta, achei que não precisava de sua própria pasta.

Isso funcionou bem no começo, mas na próxima vez que tentei gerar um novo componente (algum tempo depois, através do IDE WebStorm), ele falhou com esta mensagem. Depois de ler isso, tentei colocar o módulo de roteamento novamente em uma pasta separada e funcionou novamente.

Portanto, observe os avisos a outras pessoas, não mova o módulo de roteamento para a pasta raiz! Tenho certeza de que existem outras maneiras de lidar com isso também, mas estou feliz com isso em sua própria pasta por enquanto e usando o gerador de IDE como eu estava anteriormente.

sfaust
fonte
0

Você deve fornecer o nome do módulo especificado como

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

Onde module-namedeve ser que você deseja atualizar com o componente recém-criado.

Ms.KV
fonte
-1

Como um hack, abaixo das etapas, funcionou para mim.

1) Mova os arquivos * .module.ts de src / app para um local fora do projeto.

2) Executar comando para criar componente [ng g c component-name]

3) Volte os arquivos * .module.ts para src / app /

Anoop Mayampilly Muraleedharan
fonte
Para esta solução, verifique se o componente também está registrado no módulo relevante. A execução do comando usando o cli deve fazê-lo. Eu acho que o ponto negativo foi por causa desse problema.
Homa Pourmohammadi 13/09/19