无法确定组件角度的模块5

时间:2017-11-05 07:15:17

标签: angular angular5

使用" ng build --prod"构建Angular应用程序时出现以下错误。当我使用Angular 4构建并使用Angular 5获取错误时,这是​​有效的。使用Angular 5" ng serve"工作得很好。

  

错误中的错误:无法在mypath / node_modules / time-ago-pipe / time-ago-pipe.ts中确定类TimeAgoPipe的模块!将TimeAgoPipe添加到NgModule以修复它。

获取https://www.npmjs.com/package/time-ago-pipe

的错误

任何解决方案?

13 个答案:

答案 0 :(得分:17)

检查区分大小写

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

在我的情况下,问题是在我的import语句中使用U作为资本创建了文件夹用户。但实际上在磁盘上它是小例子。当我在import语句中将文件夹重命名为user(带小写的情况下)时,它对我有用。

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

请检查导入路径的区分大小写。

答案 1 :(得分:8)

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", ... ]
}

答案 2 :(得分:5)

就我而言,该错误是由于各种文件中同一类的多个定义引起的。发生这种情况的原因是某些开发人员的复制粘贴代码。

答案 3 :(得分:3)

我有完全相同的问题并且可以提供解决方法,但不确定为什么这个特定的管道没有被aot构建成功获取:

解决方法

从node_modules / time-ago-pipe复制time-ago-pipe.ts,然后将此文件复制到您自己的项目中。

将其添加到模块中的声明中,然后将其导入导入,例如:

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

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

答案 4 :(得分:1)

遇到此问题并希望合并建议,并提出一些新建议(有关我的建议,请参见最后编号的项目符号):

  1. 就我而言,错误是无法确定 Pipe 的模块;我正在使用直接注入到Angular Pipe 中的自定义Service
    • 当我停止执行操作(移去Pipe时,问题消失了;因此我更换了Pipe变换/移到了另一个Service,根据管道而停止了。
  2. 请确保在您的declarations的{​​{1}}(和exports)属性中声明(并导出)正确的管道/组件。
  3. 如果它是第三方管道/组件(例如,在NgModule内部),将管道复制到自己的项目中(如果可能),和/或重新导出来自您的node_modules之一的管道
  4. 如果您不需要管道/组件,则可以通过添加到NgModule的{​​{1}}属性来排除文件(这可能不是每个人的选择)
  5. 或者在不进行提前编译exclude的情况下进行构建(可能是更快的构建,但是随后创建了未优化的应用程序;了解有关AOT的更多信息)
  6. 如果它是您的管道/组件(相对于第三方),请确认您不要重复定义管道类,并且不要重复-声明您的管道:即,添加到两个或两个以上不同的tsconfig.json数组 ng build --aot=false
  7. declaratations的Angular打字稿文件中,确保导入语句中没有错字或大小写问题尤其是文件名
    • (我的示例NgModule遇到大小写问题,并且有错字,并且不应该使用import { YourPipe } from './yoUr-pippe.ts'文件扩展名(在Typescript中隐含))
    • 来源:Another answer here and elsewhere,包括this github issue
  8. 就我而言,以上内容未能解决我的问题。我执行了以下许多步骤,最终问题停止了。我不确定是哪一个花招:

    • 确保任何有问题的管道/组件的'./yoUr-pippe.ts'文件使用 ,并保存在ts的{​​{1}} 中是定义管道/组件的ts
      • 例如,如果NgModule定义了import,而NgModule使用了AModule中定义的AComponent,则BPipe必须BModule {{ 1}}
        • 就我而言,我重新排列了AModule依赖关系树。我使用了"shared module"模式,因此我的Pipe可以在多个地方重复使用。
    • 确保没有没有循环import依赖项,例如these examples
    • 如果可以,Upgrade NodeJS本身和/或BModule及其工具(NgModule等)

      • 我遇到了不相关的问题,所以我找到this list of suggestions ...解决了我面临的不同问题后...但是这些建议解决了其他问题,然后让我重新解决NgModule问题(已停止发生!)
    • 成为careful about using index.ts files aka "barrel files", and the order of exports

    • 解决问题的一般方法:删除/注释掉对有问题文件的所有引用
      • 从每个文件中一次删除引用,直到您的角度应用构建成功。如果要从特定文件中删除问题,则可以提示哪个文件是问题的根源
      • 如果您从所有文件中删除了引用(这可能太难了;对我而言,这不是太多/不是太难);那么您的角度应用程序应该构建...
      • 确认您的角度应用仍在构建。就我而言,我的角度构建有不相关的错误,可以轻松修复(例如angular-cliCannot determine the module...index.ts
      • 解决其他问题后,您可以逐步取消注释您的代码,同时确保Can't bind to '___' since it isn't a known property of '___'正常运行。当我取消注释/添加了所有代码后,我的Property '___' does not exist on type '___'. Did you mean '____'不再遇到Expected 0 arguments, but got 1.问题

答案 5 :(得分:0)

对我来说,即使在声明中有组件,它也无法正常工作。因此,我从声明和导入中也删除了该组件。然后,我通过使用Visual Studio代码intellisense来自动完成声明中的组件名称,并使用自动导入来将组件导入模块文件顶部来读取它。令我惊讶的是。

如果以上任何解决方案都不适合您,那么这也值得尝试。

答案 6 :(得分:0)

  1. 导入特定组件。
  2. 将组件添加到@NgModule。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

就我而言,出于某种原因,我在mypipe.tsapp.component.ts中都有一个声明为自己的类的管道。我在app.component中删除了一个,并且编译良好。

在错误消息中,检查错误的确切位置,然后查看项目中是否为重复代码。

答案 9 :(得分:0)

我也仅在生产版本上遇到了相同的错误,而在开发版本上却没有。我在app.module.ts中导入了component.ts文件,但未在NgModule中使用。所以我删除了导入,效果很好。

答案 10 :(得分:0)

就我而言,有两个组件被命名为相同。我删除了其中一个,它是固定的。

答案 11 :(得分:0)

通常在创建组件但未将其导入任何模块时会发生此错误。

答案 12 :(得分:0)

确保在@NgModule 中导入组件。