错误:多个模块匹配。使用skip-import选项跳过将组件导入到最近的模块中


316

当我尝试在角度cli中创建组件时,它向我显示了此错误。我如何摆脱它?

错误:多个模块匹配。使用skip-import选项可以跳过将组件导入到最近的模块中的操作。

我正在使用angular cli版本:1.4.1

Answers:


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 '17

就我而言,我必须确保这样做时我位于应用程序文件夹中
trees_are_great


53

这是由于一代人试图将您的组件添加到模块(即添加此行)引起的

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

但它发现了2个模块。

如前所述这里,他们是固定的情况下,只要在根的src / app文件夹,你只有1个模块,你很好,所以才动次级模块的子文件夹。

否则你必须使用 --module


9
这似乎是最有用的答案,谢谢,您不必一直指定模块。
阿温

是的 将我的其他模块移至modules子文件夹,现在一切都很好。
粉碎

1
感谢您的提醒,最后我找到了第二个模块:RoutingModule,并将其移至子文件夹
Zheng Kai


11

只是对Zisha的答案进行了小幅更新。

在我的项目中,所有模块都放在一个名为“模块”的文件夹中,所有组件都放在“ src / app”下的“ components”文件夹中

文件夹结构

因此,为了在特定路径下创建组件,我使用了以下语法:

ng gc components_path / component_name-模块modules_path / module_name

例如:

ng gc components / login --module modules / app


1
我不知道,但是,不是将组件放置在相关模块中的“更好”的设计实践吗?
Ojonugwa Jude Ochalifu

8

Angular CLI:6.0.8
节点:10.4.0
OS:linux x64
Angular: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

如果您希望手动添加组件的导入


-做的伎俩!我有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

当应用程序或库具有多个嵌套模块时

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 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创建的,它创建了3个独立的模块: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

else首先创建模块ng g module modulename

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

我想生成sidebar组件,shared.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 new angular”命令生成了项目,并且它已经在app文件夹中生成了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 run规范。

示例:npm运行ng gc组件/计划--- module = app

或者:npm run ng gc components / scheduling --- skip-import



0

只是为了给像我这样的任何人(其中只有一个应用程序)添加另一条信息。

我使用主app.module.ts设置了应用程序,并且使用主应用程序下自己文件夹中的路由模块进行了路由。我经历了一些“清理工作”,因为我还有其他一些事情需要更好地组织。我做的一件事是将routing.module.ts移到根文件夹;因为它是文件夹中的唯一文件,所以我认为它不需要它自己的文件夹。

最初,此方法运行良好,但下一次我尝试生成一个新组件(一段时间后,通过WebStorm IDE)时,此消息失败。阅读完此内容后,我尝试将路由模块放回一个单独的文件夹中,然后又重新工作了。

因此,请注意警告他人,请勿将路由模块移到您的根文件夹中!我敢肯定,还有其他方法可以处理此问题,但是我现在对它在自己的文件夹中并像以前一样使用IDE生成器感到满意。


0

您必须提供指定的模块名称,例如

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

module-name您想在哪里使用新创建的组件进行更新。


-1

作为一个hack,下面的步骤对我有用。

1)将* .module.ts文件从src / app移动到项目之外的位置。

2)执行命令以创建组件 [ng g c component-name]

3)将* .module.ts文件移回src / app /


对于此解决方案,请检查组件是否也在相关模块中注册。使用cli运行命令应该可以。我想负面的原因是因为这个问题。
Homa Pourmohammadi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.