오류 : 둘 이상의 모듈이 일치합니다. skip-import 옵션을 사용하여 가장 가까운 모듈로 구성 요소 가져 오기를 건너 뜁니다.


316

각도 클리에서 구성 요소를 만들려고하면이 오류가 표시됩니다. 어떻게 제거합니까?

오류 : 둘 이상의 모듈이 일치합니다. 구성 요소를 가장 가까운 모듈로 가져 오는 것을 건너 뛰려면 skip-import 옵션을 사용하십시오.

각도 클리 버전을 사용하고 있습니다 : 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

내 경우에는 내가 할 때 응용 프로그램 폴더에 있는지 확인해야했다
trees_are_great

80

이것을 시도하십시오 : 그것은 나를 위해 일하고 있습니다

ng generate component componentName --module=app.module


1
나를 위해 작동합니다. 고마워. [Angular CLI : 1.7.4 // 노드 : 9.8.0 // OS : Linux x64 // 각도 : 5.2.9]
NajlaBioinfo

53

이는 생성시 컴포넌트를 모듈에 추가하려고했기 때문에 발생합니다 (예 :이 줄 추가).

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

그러나 2 개의 모듈을 찾았습니다.

여기 에 언급 된 것처럼 루트 src / app 폴더에 모듈이 하나만 있으면 괜찮으므로 보조 모듈을 하위 폴더로 옮기십시오.

그렇지 않으면 당신은 사용해야합니다 --module


9
이것은 가장 유용한 답변으로, 모듈을 항상 지정하지 않아도됩니다. 감사합니다.
Arwin

네. 추가 모듈을 modules하위 폴더 로 옮겼습니다 .
분쇄

1
마지막으로, 두 번째 모듈 인 RoutingModule을 찾아서 하위 폴더로 옮겼습니다.
Zheng Kai

36

그것은 나를 위해 일하고있다

ng g component component-name --skip-import

7
주목해야 할 중요한 사항 중 하나는이 메소드가 app.module.ts에서 이러한 구성 요소를 자동으로 가져 오지 않는다는 것입니다. 따라서이 작업은 수동으로 수행해야합니다.
Gel

11

Zisha의 답변을 약간만 업데이트했습니다.

내 프로젝트에서 모든 모듈은 "modules"라는 폴더에 위치하고 모든 구성 요소는 "src / app"아래의 "components"폴더에 있습니다.

폴더 구조

특정 경로에서 구성 요소를 만들려면 다음 구문을 사용했습니다.

ng gc components_path / component_name-모듈 모듈 _ 경로 / 모듈 _ 이름

예 :

ng gc components / login-모듈 모듈 / 앱


1
dunno, 그러나 관련 모듈에 구성 요소를 배치하는 "더 나은"설계 관행이
아닌가

8

앵귤러 CLI : 6.0.8
노드 : 10.4.0
OS : Linux x64
앵귤러 : 6.0.4

라우팅 모듈이 별도의 NgModule (예 : manager-routing.module.ts ) 로 외부화 된 기능 모듈 (예 : "/ manager"하위 폴더 내에 manager.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

구성 요소 가져 오기를 수동으로 추가하려는 경우


-속임수를 썼는지! 나는 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

app 또는 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

폴더 아래에 새 구성 요소를 만들려고 할 때 오류가 발생했습니다.

오류 : 둘 이상의 모듈이 일치합니다. 구성 요소를 가장 가까운 모듈로 가져 오는 것을 건너 뛰려면 skip-import 옵션을 사용하십시오.

아래 명령을 사용했으며 폴더 아래에 새 구성 요소가 성공적으로 생성되었습니다.

 ng g c folderName/my_newComponent ---module ../app

2

내 프로젝트는 Visual Studio Community 2017을 사용하여 만들었으며 app.browser.module, app.server.module 및 app.shared.module의 세 가지 개별 모듈을 만듭니다.

내 구성 요소를 만들려면 위의 답변을 확인하고 내 모듈이 app.shared.module임을 알았습니다.

그래서 나는 달린다.

ng g c componentName --module=app.shared.module

2

app 폴더에 둘 이상의 모듈이 있으면 아래 명령으로 구성 요소를 생성하지 못합니다.

ng generate component New-Component-Name

그 이유는 앵귤러 CLI가 여러 모듈을 감지하고 어떤 모듈에서 컴포넌트를 추가해야하는지 알 수 없기 때문입니다. 따라서 어떤 모듈 구성 요소가 추가 될 것인지 명시 적으로 언급해야합니다.

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

1

특정 모듈에서 작성하는 경우 해당 경로로 이동하여 ng gc componentname을 실행하십시오.

그렇지 않으면 먼저 모듈 만들기 모듈 모듈 이름

cd arc / app / modulename은 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.tsmaterial.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 앵귤러 : 4.2.5

내가 사용 "DOTNET 새로운 각도" 프로젝트를 생성하는 명령을, 그리고 함께 간단한 테스트 만 (응용 프로그램 폴더에있는 3 개 개의 모듈을 생성 한 새 프로젝트 이름을 겨 단지 하나의 모듈을 생성합니다.

프로젝트의 모듈을보고 원하는 모듈을 결정한 다음 이름을 지정하십시오.

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

https://angular.io/guide/architecture-modules에서 모듈에 대한 자세한 내용을 확인할 수 있습니다.


0

내 경우에는 ng가 내 환경 경로에 등록되지 않은 것 같습니다. npm run 명령을 사용하여 ng 명령을 실행했습니다. 인수를 전달하려면 npm 실행 사양에 따라 추가 항목이 필요합니다.

예 : npm ng gc 구성 요소 실행 / 스케줄링 --- module = app

또는 : npm ng gc 구성 요소 실행 / 스케줄 --- skip-import


0

구성에서 이것을했을 때이 경고가 나타났습니다 angular.json.

"prefix": "app_ng"

"app"모두로 변경하면 완벽하게 작동했습니다.


0

그냥 하나의 응용 프로그램이있는 저와 같은 누군가를 위해 이것에 다른 정보를 추가하십시오.

내 응용 프로그램을 기본 app.module.ts로 설정하고 기본 응용 프로그램 아래의 자체 폴더에 라우팅 모듈을 사용하여 라우팅했습니다. 나는 더 잘 정리해야 할 몇 가지 다른 것들이 있었기 때문에 몇 가지 정리 작업을 수행했습니다. 내가 한 일은 routing.module.ts를 루트 폴더로 옮기는 것이 었습니다. 파일이 폴더의 유일한 파일이기 때문에 자신의 폴더가 필요하지 않다고 생각했습니다.

이것은 처음에는 잘 작동했지만 다음에 WebStorm IDE를 통해 새 구성 요소를 생성하려고 할 때이 메시지로 실패했습니다. 이것을 읽은 후 라우팅 모듈을 별도의 폴더에 다시 넣으려고했는데 다시 작동했습니다.

따라서 다른 사람들에게 경고 할 수 있으므로 라우팅 모듈을 루트 폴더로 옮기지 마십시오! 나는 이것을 처리하는 다른 방법이 있다고 확신하지만, 지금은 자신의 폴더에 있고 이전과 같이 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 /로 다시 이동하십시오.


이 솔루션의 경우 구성 요소가 관련 모듈에도 등록되어 있는지 확인하십시오. cli를 사용하여 명령을 실행하면됩니다. 부정적인 점은이 문제로 인한 것 같습니다.
Homa Pourmohammadi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.