Błąd: pasuje więcej niż jeden moduł. Użyj opcji pomiń import, aby pominąć importowanie komponentu do najbliższego modułu

316

Kiedy próbuję utworzyć komponent w kątowym cli, pokazuje mi ten błąd. Jak się tego pozbyć?

Błąd: pasuje więcej niż jeden moduł. Użyj opcji pomiń import, aby pominąć importowanie komponentu do najbliższego modułu.

Używam wersji kątowej cli: 1.4.1

Ish Man
źródło

Odpowiedzi:

688

Określ moduł za pomocą parametru --module. Na przykład jeśli głównym modułem jest app.module.ts, uruchom to:

ng g c new-component --module app

Lub jeśli jesteś w innym katalogu, to

ng g c component-name --module ../
zisha
źródło
23
w moim przypadku było to ng g c admin/manageUsers ---module ../app
Alexus1024,
w moim przypadku musiałem się upewnić, że robię to w folderze aplikacji
trees_are_great
80

Spróbuj tego: działa dla mnie

ng generate component componentName --module=app.module

Shurvir Mori
źródło
1
Pracuje dla mnie. Dzięki. [Angular CLI: 1.7.4 // Węzeł: 9.8.0 // OS: linux x64 // Angular: 5.2.9]
NajlaBioinfo 20.04.2018
53

Jest to spowodowane tym, że generacja próbowała dodać komponent do modułu, tj. Dodać tę linię

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

ale znaleziono 2 moduły.

Jak powiedziano tutaj , naprawili to tak, że dopóki w głównym folderze src / app masz tylko 1 moduł, nic ci nie jest, więc po prostu przenieś moduły pomocnicze do podfolderu.

W przeciwnym razie musisz użyć --module

bresleveloper
źródło
9
To wydaje się najbardziej użyteczna odpowiedź, dzięki której nie musisz cały czas określać modułu, dzięki.
Arwin,
Tak. Przeniosłem moje dodatkowe moduły do modulespodfolderu i wszystko jest teraz w porządku.
zmiażdż
1
Dzięki za przypomnienie, w końcu znalazłem drugi moduł: RoutingModule i przeniosłem go do podfolderu
Zheng Kai
36

To działa dla mnie

ng g component component-name --skip-import
Valera Khomchenko
źródło
7
jedną ważną rzeczą do zapamiętania jest to, że ta metoda nie importuje automatycznie tych komponentów w app.module.ts. Więc należy to zrobić ręcznie.
Gel
11

Tylko mała aktualizacja odpowiedzi Zishy.

W moim projekcie wszystkie moduły zostały umieszczone w folderze o nazwie „moduły”, a wszystkie komponenty zostały umieszczone w folderze „components” w „src / app”

struktura folderów

więc aby utworzyć komponent pod określoną ścieżką, użyłem następującej składni:

ng gc ścieżka_składnika / nazwa_komponentu - moduł ścieżka_modułu / nazwa_modułu

przykład:

ng gc components / login --module module / app

Saleem Khan
źródło
1
Nie wiem, ale czy nie jest „lepszą” praktyką projektową umieszczanie komponentów w powiązanych modułach?
Ojonugwa Jude Ochalifu,
8

Angular CLI: 6.0.8
Węzeł: 10.4.0
OS: linux x64
Angular: 6.0.4

W przypadku modułu funkcji (np. Manager.module.ts w podfolderze np. „/ Manager”) z modułem routingu zewnętrznym w osobnym NgModule (np. Manager-routing.module.ts ) komunikat o błędzie:

Więcej niż jeden moduł pasuje. Użyj opcji pomiń import, aby pominąć importowanie komponentu do najbliższego modułu.

nie pojawia się, a komponent został poprawnie wygenerowany i dodany do modułu manager.module.ts .

Ale bądź ostrożny z konwencją nazewnictwa! nazwa modułu routingu musi kończyć się na „ -routing ”!

Jeśli moduł routingu otrzyma nazwę taką jak np. Manager-router.module.ts , CLI narzeka na komunikat o błędzie i oczekuje, że udostępnisz opcję --module, aby automatycznie dodać import komponentu:

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

lub

ng generate component some-name --skip-import

jeśli wolisz ręcznie dodać import komponentu

pchemeque
źródło
-Załatwiło sprawę! Miałem lib-name.routing.module.tszamiast lib-name-routing.module.ts.
mvermand,
7

Istnieją dwa sposoby rozwiązania tego problemu.

1) Pomiń (używając polecenia --skip-import in) domyślny import i utwórz komponent, a po utworzeniu komponentu zaimportuj go ręcznie, gdziekolwiek chcesz go użyć.

ng generate component my-component --skip-import

2) Podaj nazwę modułu wprost tam, gdzie chcesz go zaimportować

ng generate  component  my-component --module=my-module.module
UniCoder
źródło
4

Gdy aplikacja lub lib mają wiele zagnieżdżonych modułów

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

Wynik

myApp
  > src
    > app
      app.module.ts
      > routes
        > login
          > auth
            > my-auth
              my-auth.component.ts etc...
          login.module.ts
SoEzPz
źródło
3

Wystąpił błąd poniżej podczas próby utworzenia nowego komponentu w folderze.

błąd: pasuje więcej niż jeden moduł. Użyj opcji pomiń import, aby pominąć importowanie komponentu do najbliższego modułu.

Użyłem poniżej polecenia i nowy komponent został pomyślnie utworzony w folderze.

 ng g c folderName/my_newComponent ---module ../app
Shakeer Hussain
źródło
2

Mój projekt został utworzony za pomocą Visual Studio Community 2017 i tworzy 3 oddzielne moduły: app.browser.module, app.server.module i app.shared.module

Aby utworzyć moje komponenty, sprawdziłem powyższe odpowiedzi i znalazłem mój moduł jako app.shared.module.

Więc uruchamiam:

ng g c componentName --module=app.shared.module
Matheus Maximo
źródło
2

Jeśli w folderze aplikacji znajduje się więcej niż jeden moduł, generowanie komponentu za pomocą poniższego polecenia nie powiedzie się:

ng generate component New-Component-Name

Powodem jest to, że kątowy interfejs CLI wykrywa wiele modułów i nie wie, w którym module dodać komponent. Musisz więc wyraźnie wskazać, który moduł zostanie dodany:

ng generate component New-Component-Name --module=ModuleName
Palash Roy
źródło
1

jeśli tworzysz w określonym module, przejdź do tej ścieżki i uruchom ng gc nazwa_komponentu

w przeciwnym razie stwórz moduł najpierw ng moduł modulename

cd arc / app / modulename przejdź do ścieżki modulename i utwórz komponent

Rohithd
źródło
0

wypróbuj nagłówek komponentu g - moduł aplikacji, to działa dla mnie

Istvan Dembrovszky
źródło
1
działa w kanciastym 6. Przesunąłem trasy, app.routing.module.tsstąd błąd
uczenie się ...
0

jeśli masz więcej niż jeden moduł, musisz podać nazwę modułu

 ng g c componentName --module=modulename.module 
priya_21
źródło
0

Kątowy CLI: 8.3.1

gdy masz wiele module.tsplików w module, musisz określić, dla którego pliku modułu generujesz komponent.

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

na przykład mam udostępniony folder modułu, w którym mam shared.module.tsi material.module.tspodoba mi się to

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

i chcę wygenerować sidebarkomponent, shared.module.ts a następnie uruchomię następujące polecenie

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

jeśli chcesz wyeksportować komponent, uruchom następujące polecenie

ng g c shared/sidebar --module=shared.module --export
Zuber
źródło
0

Kątowy CLI: 8.3.4 Węzeł: 10.16.3 Angualr: 4.2.5

Użyłem polecenia „dotnet new angular” do wygenerowania projektu i wygenerowałem 3 różne moduły w folderze aplikacji (chociaż prosty test z nową nazwą projektu generuje tylko jeden moduł.

zobacz moduły w swoim projekcie i zdecyduj, który moduł chcesz - a następnie podaj nazwę

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

Możesz przeczytać więcej o modułach tutaj: https://angular.io/guide/architecture-modules

Homa Pourmohammadi
źródło
0

W moim przypadku wydaje się, że ng nie jest zarejestrowany na mojej ścieżce środowiska. Używam polecenia npm run do uruchamiania poleceń ng. Pamiętaj, aby przekazywać argumenty, potrzebujesz dodatkowej - zgodnie ze specyfikacją uruchomienia npm.

Przykład: npm uruchamianie komponentów / harmonogramu gc - --module = app

Lub: npm uruchom ng gc components / scheduling - --skip-import

Scott Moniz
źródło
0

Miałem to ostrzeżenie, gdy miałem to w angular.jsonkonfiguracji:

"prefix": "app_ng"

Po zmianie na "app"wszystko działało idealnie dobrze.

Valera Tumash
źródło
0

Wystarczy dodać do tego kolejną informację dla każdego takiego, jak ja, który zdarza się, że ma tylko jedną aplikację.

Miałem aplikację skonfigurowaną z głównym app.module.ts, a routing z modułem routingu znajdował się we własnym folderze w głównej aplikacji. Przeszedłem i zrobiłem trochę „sprzątania”, ponieważ miałem kilka innych rzeczy, które trzeba było lepiej zorganizować. Jedną rzeczą, którą zrobiłem, było przeniesienie routing.module.ts do folderu głównego; ponieważ był to jedyny plik w folderze, pomyślałem, że nie potrzebuje własnego folderu.

Na początku działało to dobrze, ale następnym razem próbowałem wygenerować nowy komponent (jakiś czas później, za pośrednictwem WebStorm IDE), ale ten komunikat nie powiódł się. Po przeczytaniu tego spróbowałem ponownie umieścić moduł routingu w osobnym folderze i znów zadziałało.

Pamiętaj więc o ostrzeżeniu dla innych, nie przesuwaj modułu routingu do folderu głównego! Jestem pewien, że istnieją również inne sposoby radzenia sobie z tym, ale jestem zadowolony z tego, że na razie jest w swoim własnym folderze i używa generatora IDE, tak jak poprzednio.

sfaust
źródło
0

Musisz podać nazwę modułu, np

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

Gdzie module-namepowinna być aktualizacja z nowo utworzonym komponentem.

Pani K.
źródło
-1

Jako hack, poniżej kroków, działało dla mnie.

1) Przenieś pliki * .module.ts z src / app do lokalizacji poza projektem.

2) Wykonaj polecenie, aby utworzyć komponent [ng g c component-name]

3) Przenieś pliki * .module.ts z powrotem do src / app /

Anoop Mayampilly Muraleedharan
źródło
W przypadku tego rozwiązania sprawdź, czy komponent jest również zarejestrowany w odpowiednim module. Uruchomienie polecenia za pomocą cli powinno to zrobić. Myślę, że negatywny punkt był z powodu tego problemu.
Homa Pourmohammadi