Ошибка: более одного модуля соответствует. Используйте параметр skip-import, чтобы пропустить импорт компонента в ближайший модуль.

317

Когда я пытаюсь создать компонент в angular cli, он показывает мне эту ошибку. Как мне от этого избавиться?

Ошибка: более одного модуля соответствует. Используйте параметр skip-import, чтобы пропустить импорт компонента в ближайший модуль.

Я использую угловую версию Cli: 1.4.1

Иш Мэн
источник

Ответы:

691

Укажите модуль, используя параметр --module. Например, если основным модулем является app.module.ts, запустите это:

ng g c new-component --module app

Или если вы находитесь в другом каталоге, то

ng g c component-name --module ../
Zisha
источник
23
в моем случае это было ng g c admin/manageUsers ---module ../app
Alexus1024
в моем случае я должен был убедиться, что я был в папке приложения, когда делал это
trees_are_great
80

Попробуйте это: это работает для меня

ng generate component componentName --module=app.module

Шурвир Мори
источник
1
Работает для меня. Спасибо. [Angular CLI: 1.7.4 // Узел: 9.8.0 // ОС: linux x64 // Angular: 5.2.9]
NajlaBioinfo
53

Это вызвано тем, что поколение пыталось добавить ваш компонент в модуль, т.е. добавить эту строку

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

но он нашел 2 модуля.

Как указано здесь , они исправили это в ситуации, когда, пока в корневой папке src / app у вас есть только 1 модуль, у вас все в порядке, так что просто переместите дополнительные модули в подпапку.

В противном случае вы должны использовать --module

bresleveloper
источник
9
Это кажется наиболее полезным ответом, избавляя вас от необходимости постоянно указывать модуль, спасибо.
Арвин
Ага. Перенес мои дополнительные модули в modulesподпапку, и теперь все хорошо.
раздавить
1
Спасибо за напоминание, наконец-то я нашел второй модуль: RoutingModule и переместил его в подпапку
Zheng Kai
36

Это работает на меня

ng g component component-name --skip-import
Валера Хомченко
источник
7
Важно отметить, что этот метод автоматически не импортирует эти компоненты в app.module.ts. Так что это должно быть сделано вручную.
Гель
11

Просто небольшое обновление к ответу Зиши.

В моем проекте все модули были помещены в папку «модули», а все компоненты помещены в папку «компоненты» в «src / app»

структура папок

поэтому для создания компонента по определенному пути я использовал следующий синтаксис:

ng gc component_path / component_name - модуль module_path / module_name

пример :

ng gc компоненты / логин - модули модулей / приложение

Салим Хан
источник
1
Я не знаю, но разве не «лучшая» практика проектирования для размещения ваших компонентов в связанных с ними модулях?
Ojonugwa Jude Ochalifu
8

Угловой CLI: 6.0.8
Узел: 10.4.0
ОС: linux x64
Угловой: 6.0.4

Если в подпапке, например, «/ manager», например, имеется функциональный модуль (например, manager.module.ts ), модуль маршрутизации которого выведен в отдельный модуль NgModule (например, manager-routing.module.ts ), сообщение об ошибке:

Соответствует более одного модуля. Используйте параметр skip-import, чтобы пропустить импорт компонента в ближайший модуль.

не появляется, и компонент правильно генерируется и добавляется в модуль manager.module.ts .

НО БУДЬТЕ ОСТОРОЖНЫ ! имя модуля маршрутизации должно заканчиваться на " -routing "!

Если модулю маршрутизации присваивается имя, например, manager-router.module.ts , CLI будет выдавать сообщение об ошибке и ожидать, что вы предоставите опцию --module для автоматического добавления импорта компонента:

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

или

ng generate component some-name --skip-import

если вы предпочитаете добавить импорт компонента вручную

pchemeque
источник
-Сделал трюк! Я имел lib-name.routing.module.tsвместо lib-name-routing.module.ts.
mvermand
7

Есть два способа решить эту проблему.

1) Пропустите (используя --skip-import в команде) импорт по умолчанию и создайте компонент, и как только компонент будет создан, импортируйте его вручную везде, где вы хотите его использовать.

ng generate component my-component --skip-import

2) Укажите имя модуля явно, где вы хотите его импортировать

ng generate  component  my-component --module=my-module.module
UniCoder
источник
4

Когда приложение или библиотека имеют несколько вложенных модулей

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

Угловой CLI

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

NRWL NX Угловой CLI

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

результат

myApp
  > src
    > app
      app.module.ts
      > routes
        > login
          > auth
            > my-auth
              my-auth.component.ts etc...
          login.module.ts
SoEzPz
источник
3

Я получаю ниже ошибку при попытке создать новый компонент в папке.

ошибка: более одного модуля соответствует. Используйте параметр skip-import, чтобы пропустить импорт компонента в ближайший модуль.

Я использовал приведенную ниже команду, и новый компонент был успешно создан в папке.

 ng g c folderName/my_newComponent ---module ../app
Шейкер Хуссейн
источник
2

Мой проект был создан с использованием Visual Studio Community 2017, и он создает 3 отдельных модуля: app.browser.module, app.server.module и app.shared.module

Чтобы создать мои компоненты, я проверил ответы выше и обнаружил, что мой модуль - app.shared.module.

Итак, я бегу:

ng g c componentName --module=app.shared.module
Матеус Максимо
источник
2

Если в папке приложения находится более одного модуля, генерировать компонент с помощью приведенной ниже команды не удастся:

ng generate component New-Component-Name

Причина в том, что угловой интерфейс командной строки обнаруживает несколько модулей и не знает, в какой модуль добавить компонент. Итак, вам нужно явно указать, какой компонент модуля будет добавлен:

ng generate component New-Component-Name --module=ModuleName
Палаш Рой
источник
1

если вы создаете в конкретном модуле, перейдите по этому пути и запустите ng gc componentname

еще создать модуль первый нг г модуль по имени

cd arc / app / modulename перейдите в путь по модулю и создайте компонент

rohithd
источник
0

попробуйте ng g header заголовка компонента - Модуль приложения это работа для меня

Иштван Дембровский
источник
1
работает в угловых 6. Я переместил маршруты к, app.routing.module.tsследовательно, ошибка
обучение ...
0

если у вас более одного модуля, вам нужно указать имя модуля

 ng g c componentName --module=modulename.module 
priya_21
источник
0

Угловой CLI: 8.3.1

если у вас есть несколько module.tsфайлов внутри модуля, вам нужно указать, для какого файла модуля вы генерируете компонент.

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

например, у меня есть общая папка модуля, внутри которой я shared.module.tsи material.module.tsкак это

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

и я хочу сгенерировать sidebarкомпонент для shared.module.ts тогда я буду запускать следующую команду

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

если вы хотите экспортировать компонент, выполните следующую команду

ng g c shared/sidebar --module=shared.module --export
Zuber
источник
0

Angular CLI: 8.3.4 Узел: 10.16.3 Angualr: 4.2.5

Я использовал команду «dotnet new angular» для генерации проекта, и он сгенерировал 3 разных модуля в папке приложения (хотя простой тест с ng new project-name просто генерирует один модуль.

посмотрите модули в вашем проекте и определите, какой модуль вам нужен - затем укажите название

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

Вы можете прочитать больше о модулях здесь: https://angular.io/guide/architecture-modules

Хома Пурмохаммади
источник
0

В моем случае кажется, что ng не зарегистрирован в моем пути к среде. Я использовал команду npm run для запуска команд ng. Имейте в виду, что для передачи аргументов вам нужно дополнительное - согласно спецификации запуска npm.

Пример: npm run ng gc компоненты / планирование - --module = app

Или: npm запустить ng gc компоненты / планирование - --skip-import

Скотт Мониз
источник
0

У меня было это предупреждение, когда это было в angular.jsonконфиге:

"prefix": "app_ng"

Когда меняли на "app"все работало отлично.

Валера Тумаш
источник
0

Просто чтобы добавить к этому еще одну информацию для тех, кто, как и я, у кого есть только одно приложение.

У меня было настроено приложение с основным app.module.ts, и у меня была маршрутизация с модулем маршрутизации в его собственной папке под основным приложением. Я прошел и сделал некоторую «уборку», так как у меня было несколько других вещей, которые нужно было организовать лучше. Одна вещь, которую я сделал, это переместил routing.module.ts в корневую папку; так как это был единственный файл в папке, я решил, что ему не нужна собственная папка.

Сначала это работало нормально, но в следующий раз, когда я попытался сгенерировать новый компонент (некоторое время спустя, через IDE WebStorm), это сообщение не сработало. Прочитав это, я попытался поместить модуль маршрутизации обратно в отдельную папку, и он снова заработал.

Так что обратите внимание на предупреждение других, не перемещайте модуль маршрутизации в свою корневую папку! Я уверен, что есть и другие способы справиться с этим, но я доволен этим пока что в его собственной папке и использую генератор IDE, как раньше.

sfaust
источник
0

Вы должны указать имя модуля как

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

Где module-nameдолжно быть, что вы хотите обновить с недавно созданным компонентом.

Ms.KV
источник
-1

Как взлом, ниже шагов, работал для меня.

1) Переместите файлы * .module.ts из src / app в папку вне проекта.

2) Выполнить команду для создания компонента [ng g c component-name]

3) Переместите обратно файлы * .module.ts в src / app /.

Anoop Mayampilly Muraleedharan
источник
Для этого решения проверьте, зарегистрирован ли компонент также в соответствующем модуле. Выполнение команды с помощью cli должно сделать это. Я думаю, что отрицательный момент был из-за этой проблемы.
Хома Pourmohammadi