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

当我尝试在angular cli中创建一个组件时,它显示了这个错误。我怎样才能摆脱它呢?

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

我使用的是angular cli版本:1.4.1

537410 次浏览

使用——module参数指定模块。 例如,如果主模块是app.module。Ts,运行这个:

ng g c new-component --module app

或者如果你在另一个目录

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

这是由于生成试图将您的组件添加到模块,即添加这一行

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

但它找到了两个模块。

正如所述在这里,他们修复了它的情况,只要在根src/app文件夹中你只有一个模块,你就没事了,所以只有将辅助模块移动到子文件夹

否则你必须使用--module

只是对Zisha的答案做了一个小小的更新。

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

文件夹结构

所以要在特定的路径下创建一个组件,我使用以下语法:

components_path/component_name——module modules_path/module_name

例子:

Ng g c组件/登录——模块模块/app

这对我很有用

# EYZ0

我的项目是使用Visual Studio Community 2017创建的,它创建了3个独立的模块:app.browser。Module, app.server.module和app.shared.module

为了创建我的组件,我检查了上面的答案,发现我的模块是app.share .module。

所以,我跑:

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

try ng组件头——模块应用程序 这是我的工作

这对我很有用

ng g component component-name --skip-import

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

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

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

3)移回*.模块。Ts文件到src/app/

< p > # EYZ0
# EYZ0
# EYZ0
角:6.0.4 < / >强

如果有一个功能模块(例如manager.module.ts在例如。"/manager"子文件夹),路由模块外部化到单独的NgModule(例如manager-routing.module.ts),错误消息:

超过一个模块匹配。使用skip-import选项可以跳过将组件导入到最近的模块。

不会出现,并且组件被正确生成并添加到manager.module.ts模块中。

但是要小心命名约定!路由模块的名称必须以“路由”结束!

如果路由模块被赋予了一个像manager-router.module.ts这样的名称,CLI会报错,并希望你提供——module选项来自动添加组件导入:

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

ng generate component some-name --skip-import

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

当app文件夹下有多个模块时,使用以下命令生成组件将失败:

ng generate component New-Component-Name

原因是angular CLI检测到多个模块,不知道该在哪个模块中添加组件。因此,您需要显式地提到将添加哪个模块组件:

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

当我试图在一个文件夹下创建一个新组件时,我正在得到下面的错误。

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

我已经使用下面的命令和新组件成功创建在一个文件夹下。

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

当有多个模块时,需要指定模块名

 ng g c componentName --module=modulename.module

当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 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

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

和我想为shared.module.ts生成sidebar组件 然后执行以下命令

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

如果要导出组件,则运行以下命令

ng g c shared/sidebar --module=shared.module --export
Angular CLI: 8.3.4 节点:10.16.3 angalr: 4.2.5

我使用“dotnet new angular”命令来生成项目,它在app文件夹中生成了3个不同的模块(尽管使用Ng新项目名称的简单测试只生成一个模块。

查看项目中的模块并决定需要哪个模块-然后指定名称

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

你可以在这里阅读更多关于模块: # EYZ0 < / p >

在我的例子中,ng似乎没有注册到我的环境路径中。我一直使用npm run命令来运行ng命令。注意,根据npm运行规范,为了传递参数,你需要额外的--

例子:

npm run ng g c components/scheduling **--** --module=app

或者:

npm run ng g c components/scheduling **--** --skip-import

有两种方法可以解决这个问题。

1)跳过(在命令中使用——Skip -import)默认导入并创建组件,一旦组件创建完成,就可以手动将它导入到任何你想使用它的地方。

ng generate component my-component --skip-import

2)在你想导入模块的地方显式地提供模块名

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

如果你是在特定的模块中创建,请进入该路径并运行 Ng g c componentname

首先创建模块 Ng module modulename

.

. < p > cd / app / modulename弧 进入modulename path并创建组件

我在angular.json配置中有这个警告:

"prefix": "app_ng"

当更改为"app"时,一切都工作得很好。

再补充一点信息给像我这样只有一个程序的人。

我用主app.module.ts设置了我的应用程序,我用路由模块在主应用程序下的自己的文件夹中进行路由。我浏览了一下,做了一些“清理”,因为我还有一些其他的东西需要更好地组织。我做的一件事是将routing.module.ts移动到根文件夹;因为它是文件夹中唯一的文件,我认为它不需要它自己的文件夹。

这一开始工作得很好,但下一次我试图生成一个新组件时(一段时间后,通过WebStorm IDE),它失败了。读完这篇文章后,我试着把路由模块放回一个单独的文件夹,它又工作了。

所以要提醒其他人,不要将路由模块移动到根文件夹中!我确信还有其他方法来处理这个问题,但我很高兴它现在在它自己的文件夹中,并使用IDE生成器,就像我以前一样。

你必须像这样指定模块名

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

module-name应该是您想要使用新创建的组件进行更新的地方。

对我来说,这个命令工作:

ng g c new-component --module app

你必须在.module扩展名之前只提到模块的起始名

例如,如果模块名是user-account.module.ts 然后在命令中提供类似

ng g c newComponent --module=user-account