使用" 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
的错误任何解决方案?
答案 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)
遇到此问题并希望合并建议,并提出一些新建议(有关我的建议,请参见最后编号的项目符号):
Pipe
的模块;我正在使用直接注入到Angular Pipe
中的自定义Service
。
Pipe
时,问题消失了;因此我更换了Pipe
变换/移到了另一个Service
,根据管道而停止了。declarations
的{{1}}(和exports
)属性中声明(并导出)正确的管道/组件。
NgModule
内部),将管道复制到自己的项目中(如果可能),和/或重新导出来自您的node_modules
之一的管道
NgModule
的{{1}}属性来排除文件(这可能不是每个人的选择)
exclude
的情况下进行构建(可能是更快的构建,但是随后创建了未优化的应用程序;了解有关AOT的更多信息)
tsconfig.json
数组 ng build --aot=false
declaratations
的Angular打字稿文件中,确保导入语句中没有错字或大小写问题,尤其是文件名
NgModule
遇到大小写问题,并且有错字,并且不应该使用import { YourPipe } from './yoUr-pippe.ts'
文件扩展名(在Typescript中隐含))就我而言,以上内容未能解决我的问题。我执行了以下许多步骤,最终问题停止了。我不确定是哪一个花招:
'./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
等)
NgModule
问题(已停止发生!)成为careful about using index.ts
files aka "barrel files", and the order of exports
angular
个文件问题)angular-cli
或Cannot 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)
答案 7 :(得分:0)
对我来说,问题是在导入路径中区分大小写。但是您必须找到所有有问题的导入路径。不仅导入模块中使用的内容。
答案 8 :(得分:0)
就我而言,出于某种原因,我在mypipe.ts
和app.component.ts
中都有一个声明为自己的类的管道。我在app.component中删除了一个,并且编译良好。
在错误消息中,检查错误的确切位置,然后查看项目中是否为重复代码。
答案 9 :(得分:0)
我也仅在生产版本上遇到了相同的错误,而在开发版本上却没有。我在app.module.ts中导入了component.ts文件,但未在NgModule中使用。所以我删除了导入,效果很好。
答案 10 :(得分:0)
就我而言,有两个组件被命名为相同。我删除了其中一个,它是固定的。
答案 11 :(得分:0)
通常在创建组件但未将其导入任何模块时会发生此错误。
答案 12 :(得分:0)
确保在@NgModule 中导入组件。