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

use*_*021 21 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的错误

有解决方案吗

Ana*_*ali 24

检查区分大小写

import { MyComponent } from "./User/my-component";
Run Code Online (Sandbox Code Playgroud)

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

import { MyComponent } from "./user/my-component";
Run Code Online (Sandbox Code Playgroud)

因此,请检查导入路径的区分大小写.

  • 我不敢相信。这个区分大小写的问题也发生在 Windows 中! (2认同)

Xes*_*nix 14

Angular 5和特定角度cli 1.5默认提前编译打开它需要知道它在项目文件夹中找到的所有组件/管道等的模块,如果你有一些未在任何模块中声明的组件它将抛出错误.

您可以TimeAgoPipe在某个模块中声明:

@NgModule({
  declarations: [TimeAgoPipe, ...]
})
export class AppModule {}// for example can be any other used module
Run Code Online (Sandbox Code Playgroud)

或者尝试在没有提前编译的情况下运行构建,结果代码将运行得更慢

ng build --prod --aot=false
Run Code Online (Sandbox Code Playgroud)

第三种方法,如果你根本不使用那个管道,你可以将它添加到排除的文件中 tsconfig.json

{
  ...
  "exclude": [ "path/to/unused/component.ts", ... ]
}
Run Code Online (Sandbox Code Playgroud)


aCi*_*CiD 8

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


Jam*_*s c 5

我有完全相同的问题,并且可以提供一种解决方法,尽管不确定为什么aot构建无法成功使用此特定管道:

解决方法

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

像往常一样将其添加到模块中的声明中,并将其导入到导入中,例如:

import { TimeAgoPipe } from './_pipes/time-ago-pipe';
Run Code Online (Sandbox Code Playgroud)

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


The*_*Pea 5

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

  1. 在我的情况下,错误是它无法确定模块Pipe; 我使用的是Pipe直接注入 Angular 的自定义Service
  • 当我停止使用 时Pipe,问题就消失了;所以我删除了Pipe转换——我将转换移到了一个不同的ServicePipe完全取决于。
  1. 确保您在(和)属性中正确声明(并导出)您的管道/组件declarationsexportsNgModule
  2. 如果它是第 3 方管道/组件(即内部node_modules),请将管道复制到您自己的项目(如果可能),和/或从您的项目之一重新导出管道NgModule
  3. 如果不需要管道/组件,可以通过添加到 的属性来排除文件(这可能不是每个人的选择) excludetsconfig.json
  4. 或者在没有提前编译的ng build --aot=false情况下构建(可能是更快的构建,但随后会创建一个未优化的应用程序;了解有关 AOT 的更多信息)
  5. 如果它是您的管道/组件(与第 3 方相比),请确认您没有双重定义您的管道类,也不要双重声明您的管道:即添加到两个或多个不同s 的declaratations数组中 NgModule
  6. 在您所在的 Angular 打字稿文件中import { YourPipe } from './yoUr-pippe.ts',确保导入语句中没有拼写错误或大小写问题尤其是文件名
  7. 就我而言,上述内容并没有解决我的问题。我做了下面的许多步骤,最终问题停止了。我不确定哪一个成功了:
    • 确保任何ts文件,其使用有问题的管道/组件,生活在NgModule 其中importS中NgModule所定义的管道/组件

      • 例如,如果AModule限定AComponent,其用途BPipe,在定义的BModule,然后AModule必须importBModule
        • 就我而言,我重新安排了我的NgModule依赖树。我使用了“共享模块”模式,因此我的 Pipe 可以在多个地方重复使用。
    • 确保没有循环NgModule依赖,就像在这些 例子中一样

    • 如果可以,升级NodeJS自身和/或angular及其工具(angular-cli等)

      • 我遇到了不相关的问题,所以我找到了这个建议列表……但这些建议解决了其他问题,让我重新解决这个Cannot determine the module... 问题(这不再发生了!)
    • 小心使用index.ts文件又名“桶文件”,以及顺序exports

    • 一般解决问题的方法:删除/注释掉对有问题文件的任何引用

      • 从每个文件中一次删除一个引用,直到您的 angular 应用程序构建工作。如果从特定文件中删除解决了问题,您就知道哪个文件是问题的根源
      • 如果您从所有文件中删除引用(这可能太难了;对我来说不是太多/也不是太难);那么你的 Angular 应用程序应该构建......
      • 确认您的 angular 应用程序仍在构建。就我而言,我的 Angular 构建有我可以轻松修复的无关错误(例如, 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.
      • 修复任何其他问题后,您可以逐渐取消注释代码,同时确保您的ng build工作正常。当我取消注释/添加我所有的代码时......我ng build不再有这个Cannot determine the module...问题


归档时间:

查看次数:

15330 次

最近记录:

5 年,10 月 前