Angular 无法确定组件5的模块

Angular 无法确定组件5的模块,angular,angular5,Angular,Angular5,当我使用“ng build--prod”构建Angular应用程序时,出现以下错误。当我使用Angular 4构建时,这是有效的,而使用Angular 5得到错误。有角度的5“ng发球”非常有效 错误中出错:无法确定mypath/node\u modules/time-ago-pipe/time-ago-pipe.ts中类TimeAgoPipe的模块!将TimeAgoPipe添加到NgModule以修复它 获取错误 有任何解决方案吗?Angular 5,特别是Angular cli 1.5已启用

当我使用“ng build--prod”构建Angular应用程序时,出现以下错误。当我使用Angular 4构建时,这是有效的,而使用Angular 5得到错误。有角度的5“ng发球”非常有效

错误中出错:无法确定mypath/node\u modules/time-ago-pipe/time-ago-pipe.ts中类TimeAgoPipe的模块!将TimeAgoPipe添加到NgModule以修复它

获取错误


有任何解决方案吗?

Angular 5,特别是Angular cli 1.5已启用默认的提前编译,它需要知道在项目文件夹中找到的所有组件/管道等的模块。如果您有一些未在任何模块中声明的组件,它将抛出错误

您可以在某些模块中声明
TimeAgoPipe

@NgModule({
  declarations: [TimeAgoPipe, ...]
})
export class AppModule {}// for example can be any other used module
或者尝试在不提前编译的情况下运行构建生成的代码将运行得较慢

ng build --prod --aot=false
第三种方法是,如果您根本不使用该管道,您可以将其添加到
tsconfig.json

{
  ...
  "exclude": [ "path/to/unused/component.ts", ... ]
}

我遇到了完全相同的问题,可以提供一个解决方案,尽管我不确定aot构建没有成功拾取此特定管道的原因:

解决方法

从节点_模块/time-ago管道复制time-ago-pipe.ts,然后将此文件复制到您自己的项目中

将其正常添加到模块中的声明中,并将其导入到导入中,例如:

import { TimeAgoPipe } from './_pipes/time-ago-pipe';

这将在AOT构建中成功编译,您仍然可以使用管道。

检查大小写敏感度

import { MyComponent } from "./User/my-component";
在我的例子中,问题是文件夹用户是在我的导入语句中以U作为大写字母创建的。但实际上在磁盘上它是在一个小盒子里。当我在import语句中将文件夹重命名为user(小写为u)时,它也对我起了作用

import { MyComponent } from "./user/my-component";

所以请检查导入路径的大小写敏感度。对我来说,即使声明中有组件,它也不起作用。因此,我从声明和导入中删除了该组件。然后我通过使用VisualStudio代码intellisense在声明中自动完成组件名称,并使用auto import在模块文件顶部导入组件来阅读它。令我惊讶的是,它起了作用


如果上述任何解决方案都不适用于您,那么这也值得一试。

在我的例子中,错误是由于不同文件中对同一类的多个定义造成的。这是由于某些开发人员复制粘贴代码造成的

  • 导入特定组件
  • 将组件添加到@NgModule

  • 对我来说,导入路径中的问题是区分大小写的。但您必须找到所有存在问题的导入路径。不仅导入模块中使用的内容

    在我的例子中,出于某种原因,我在
    mypipe.ts
    以及
    app.component.ts
    中声明了一个管道作为自己的类。我删除了app.component中的一个,它编译得很好


    在错误消息中,检查它到底在哪里抱怨,看看这是否是项目中的双重代码。

    我也只在prod构建中遇到了相同的错误,而在dev构建中没有遇到。我在app.module.ts中导入了component.ts文件,但没有在NgModule中使用。所以我删除了导入,它工作得很好。

    在我的例子中,有两个组件的名称相同。我删除了其中一个,它已经修复。

    遇到了这个问题,希望整合现有的建议,并在其他方法对我无效的情况下提出一些一般策略:

  • 在我的例子中,错误是它无法确定
    管道的模块
    ;我使用的是定制
    管道
    直接注入角度
    服务
    • 当我停止使用
      管道时,问题消失了;因此,我删除了
      管道
      转换--我将转换移动到另一个
      服务
      ,完全停止依赖
      管道
  • 确保在
    NgModule的
    声明(和
    导出
    )属性中正确声明(和导出)管道/组件
    • 资料来源:
  • 如果是第三方管道/组件(即
    node_modules
    )内,将管道复制到您自己的项目中(如果可能),和/或从您的
    NgModule
    之一重新导出管道
    • 资料来源:
  • 如果不需要管道/组件,可以通过添加到
    tsconfig.json
    exclude
    属性来排除文件(这可能不是每个人的选项)
    • 资料来源:
  • 或者在没有提前编译的情况下构建
    ng build--aot=false
    (可能是更快的构建,但随后会创建一个未优化的应用程序;了解有关aot的更多信息)
    • 资料来源:
  • 如果是您的管道/组件(与第三方相比),请确认您不要双重定义管道类,并且不要双重声明您的管道:即添加到两个或更多不同
    NgModule
    s的
    声明数组中
    
    • 资料来源:
  • 在您从“/your pippe.ts”导入{YourPipe}的Angular typescript文件中,确保导入语句中没有拼写错误或大小写问题,尤其是文件名
    • (我这里的例子是
      。/您的pippe.ts'
      有大写问题和打字错误,不应该使用
      ts
      文件扩展名(这在Typescript中暗示))
    • 资料来源:,包括
  • 在我的情况下,以上并没有解决我的问题。我执行了下面的许多步骤,最终问题停止了。我不确定是哪一个起了作用:
    • 确保任何使用有问题管道/组件的
      ts
      文件位于
      NgModule
      中,该
      导入
      s