Odpowiedzi:
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 ../
Spróbuj tego: działa dla mnie
ng generate component componentName --module=app.module
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
modules
podfolderu i wszystko jest teraz w porządku.
To działa dla mnie
ng g component component-name --skip-import
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”
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
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.ts
zamiast lib-name-routing.module.ts
.
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
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
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
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
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
wypróbuj nagłówek komponentu g - moduł aplikacji, to działa dla mnie
app.routing.module.ts
stąd błąd
Kątowy CLI: 8.3.1
gdy masz wiele module.ts
plikó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.ts
i material.module.ts
podoba mi się to
shared
> shared.module.ts
> material.module.ts
i chcę wygenerować sidebar
komponent, 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
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
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
Miałem to ostrzeżenie, gdy miałem to w angular.json
konfiguracji:
"prefix": "app_ng"
Po zmianie na "app"
wszystko działało idealnie dobrze.
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.
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 /
ng g c admin/manageUsers ---module ../app