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

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 ../

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


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


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

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


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


-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

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

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

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

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

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



0

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

 ng g c componentName --module=modulename.module 

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

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


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


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.


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.


0

Musisz podać nazwę modułu, np

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

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


-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 /


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.