Помилка: збігається більше одного модуля. Використовуйте опцію пропуску-імпорту, щоб пропустити імпорт компонента в найближчий модуль


316

Коли я намагаюся створити компонент у кутовій кліпі, він показує мені цю помилку. Як я можу його позбутися?

Помилка: збігається більше одного модуля. Використовуйте опцію пропуску-імпорту, щоб пропустити імпорт компонента в найближчий модуль.

Я використовую кутовий варіант кліпу: 1.4.1

Відповіді:


688

Вкажіть модуль за допомогою параметра --module. Наприклад, якщо основним модулем є app.module.ts, запустіть це:

ng g c new-component --module app

Або якщо ви перебуваєте в іншому каталозі

ng g c component-name --module ../

23
у моєму випадку це було ng g c admin/manageUsers ---module ../app
Alexus1024,

у моєму випадку я повинен був переконатися, що я був у папці додатків, коли це робив
дерева_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


9
Це здається найкориснішою відповіддю, що позбавляє вас від необхідності постійно вказувати модуль, дякую.
Арвін

Так. Я перемістив свої додаткові модулі в modulesпідпапку, і зараз все добре.
розчав

1
Дякую за нагадування, нарешті я знайшов другий модуль: RoutingModule, і перемістив його в підпапку
Чжен Кай

36

Це працює для мене

ng g component component-name --skip-import

7
Важливо зазначити, що цей метод автоматично не імпортує ці компоненти в app.module.ts. Тож це потрібно робити вручну.
Гель

11

Лише невелике оновлення відповіді Зіші.

У моєму проекті всі модулі були розміщені в папці під назвою "модулі", а всі компоненти розміщені в папці "компоненти" під "src / app"

структура папки

щоб створити компонент під певним шляхом, я використав такий синтаксис:

ng gc components_path / імя_компонента --modules module_path / module_name

приклад:

ng gc компоненти / login - модулі модулів / додаток


1
Я не знаю, але хіба не "краща" практика проектування розміщення компонентів у відповідних модулях?
Ojonugwa Jude Ochalifu

8

Кутова CLI: 6.0.8
Вузол: 10.4.0
ОС: linux x64
Кутова: 6.0.4

Якщо у модулі функцій (напр. Manager.module.ts всередині підпапки "/ manager" є напр. "/ Manager"), модуль маршрутизації зовнішній в окрему NgModule (наприклад, manager-routing.module.ts ), повідомлення про помилку:

Більше одного модуля відповідає. Використовуйте опцію пропуску-імпорту, щоб пропустити імпорт компонента в найближчий модуль.

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

АЛЕ БУДЕТЕ ДЕРЖАВИМ конвенцію про називання! назва модуля маршрутизації має закінчуватися символом " -проведення "!

Якщо модулю маршрутизації присвоєно ім'я, наприклад, менеджер-router.module.ts , CLI поскаржиться на повідомлення про помилку і очікує, що ви надасте можливість --module автоматично додати імпорт компонента:

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

або

ng generate component some-name --skip-import

якщо ви віддаєте перевагу додати імпорт компонента вручну


The -the фокус! Я мав 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

4

Коли програма або lib мають кілька вкладених модулів

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

3

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

помилка: більше одного модуля збігається. Використовуйте опцію пропуску-імпорту, щоб пропустити імпорт компонента в найближчий модуль.

Я використав команду нижче, і новий компонент успішно створений під папкою.

 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

Причина полягає в тому, що кутовий CLI виявляє кілька модулів, і не знає, в який модуль додати компонент. Отже, вам потрібно чітко вказати, який компонент модуля буде доданий:

ng generate component New-Component-Name --module=ModuleName

1

якщо ви створюєте в конкретному модулі, перейдіть до цього шляху та запустіть ng gcnamename

інше створити модуль спочатку ng g ім'я модуля

cd arc / app / modulename перейти до шляху імені модуля та створити компонент



0

коли у вас є більше одного модуля, вам потрібно вказати ім'я модуля

 ng g c componentName --module=modulename.module 

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

0

Кутова CLI: 8.3.4 Вузол: 10.16.3 Angualr: 4.2.5

Я використовував команду "dotnet new angular" для генерування проекту, і він генерував 3 різні модулі в папці додатків (Хоча простий тест із новим ім'ям проекту) просто генерує один модуль.

перегляньте модулі у вашому проекті та вирішіть, який модуль ви хочете - тоді вкажіть назву

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

Детальніше про модулі ви можете прочитати тут: https://angular.io/guide/architecture-modules


0

У моєму випадку, здається, що ng не зареєстрований у моєму середовищі. Я використовую команду npm run для запуску ng команд. Будьте в курсі, щоб передавати аргументи, вам потрібна додаткова - відповідно до специфікації npm run.

Приклад: npm запуск ng gc компонентів / планування - --module = додаток

Або: npm запустити ng gc компоненти / планування - --skip-import


0

У мене було це попередження, коли було встановлено це angular.json:

"prefix": "app_ng"

При зміні "app"все працювало чудово.


0

Просто додати ще одну інформацію до цього для всіх, як я, хто трапляється разом, просто має єдину програму.

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

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

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


0

Ви повинні дати вказати назву модуля типу

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

Де module-nameмає бути те, що ви хочете оновити за допомогою новоствореного компонента.


-1

Як хак, нижче кроків, працював на мене.

1) Перемістіть * .module.ts файли з src / app у місце, яке знаходиться поза проектом.

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

3) Перемістіть файли * .module.ts до src / app /


Для цього рішення перевірте, чи компонент також зареєстрований у відповідному модулі. Запуск команди за допомогою кліпу повинен це зробити. Я здогадуюсь негативного моменту через це питання.
Хома
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.