エラー:複数のモジュールが一致しています。skip-importオプションを使用して、最も近いモジュールへのコンポーネントのインポートをスキップします


316

角度クリでコンポーネントを作成しようとすると、このエラーが表示されます。どうすればそれを取り除くことができますか?

エラー:複数のモジュールが一致しています。skip-importオプションを使用して、最も近いモジュールへのコンポーネントのインポートをスキップします。

Angular CLIバージョンを使用しています:1.4.1

回答:


690

--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 '18年

私の場合、私はそれを行うときにappフォルダーにいることを確認する必要がありました
trees_are_great

80

これを試してください:それは私のために働いています

ng generate component componentName --module=app.module


1
私のために働く。どうも。[Angular CLI:1.7.4 // Node:9.8.0 // OS:linux x64 // Angular:5.2.9]
NajlaBioinfo

53

これは、生成がコンポーネントをモジュールに追加しようとしたため、つまりこの行を追加しようとしたために発生します

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

2つのモジュールが見つかりました。

ここで述べように、ルートsrc / appフォルダーにモジュールが1つしかない場合は問題ないので、セカンダリモジュールをサブフォルダーに移動するだけで問題を修正しました

それ以外の場合は使用する必要があります --module


9
これは最も有用な答えのようです。おかげでいつもモジュールを指定する必要がなくなりました。
Arwin、2018年

うん。追加のモジュールをmodulesサブフォルダーに移動しましたが、すべて順調です。
クラッシュ

1
思い出してくれてありがとう、最後に2番目のモジュールRoutingModuleを見つけて、それをサブフォルダーに移動しました
Zheng Kai

36

それは私のために働いています

ng g component component-name --skip-import

7
注意すべき重要な点の1つは、このメソッドはこれらのコンポーネントをapp.module.tsに自動的にインポートしないことです。したがって、これは手動で行う必要があります。
Gel

11

ジシャの答えのほんの小さな更新。

私のプロジェクトでは、すべてのモジュールが「modules」というフォルダーに配置され、すべてのコンポーネントが「src / app」の下の「components」フォルダーに配置されています

フォルダ構造

したがって、特定のパスの下にコンポーネントを作成するには、次の構文を使用しました。

ng gc components_path / component_name --module modules_path / module_name

例:

ng gc components / login --module modules / app


1
私は
知り

8

Angular CLI:6.0.8
ノード:10.4.0
OS:linux x64
Angular:6.0.4

ルーティングモジュールが別のNgModuleに外部化された機能モジュール(たとえば、「/ manager」サブフォルダー内にmanager.module.ts)がある場合(例: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

コンポーネントのインポートを手動で追加したい場合


-トリックをしました!のlib-name.routing.module.ts代わりにしたlib-name-routing.module.ts
mvermand 2018

7

この問題を解決するには2つの方法があります。

1)デフォルトのインポートと作成コンポーネントをスキップ(コマンドで--skip-importを使用)し、コンポーネントが作成されたら、使用する場所に手動でインポートします。

ng generate component my-component --skip-import

2)インポートしたい場所にモジュール名を明示的に提供します

ng generate  component  my-component --module=my-module.module

4

アプリまたはライブラリに複数のネストされたモジュールがある場合

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

結果

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の3つの別々のモジュールを作成します

コンポーネントを作成するために、上記の回答を確認したところ、モジュールが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

Angular 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

そしてsidebarshared.module.ts そのためのコンポーネントを生成したいので、次のコマンドを実行します

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

コンポーネントをエクスポートする場合は、次のコマンドを実行します

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

0

Angular CLI:8.3.4ノード:10.16.3 Angualr:4.2.5

私が使用し、「DOTNET新しい角度」プロジェクトを生成するコマンドを、として簡単なテストが、それは(appフォルダ内の3つの異なるモジュールを生成した新しいプロジェクト名をNGがちょうど単一のモジュールを生成します。

プロジェクト内のモジュールを表示し、必要なモジュールを決定してから、名前を指定します

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-インポート


0

angular.json設定にこれがあると、この警告が出ました:

"prefix": "app_ng"

変更すると"app"、すべて完璧にうまくいきました。


0

これに加えて、アプリケーションが1つしかない私のような人のために、別の情報を追加します。

メインのapp.module.tsを使用してアプリケーションをセットアップし、メインアプリケーションの下の独自のフォルダーにあるルーティングモジュールを使用してルーティングしました。より整理する必要のある他のいくつかのことがあったので、私は通り抜けていくつかの「クリーンアップ」を行いました。私がしたことの1つは、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.