找不到模块:错误:无法解析'。/ $ _ gendir / app / app.module.ngfactory'

时间:2017-03-10 12:08:48

标签: angular angular-cli

升级我的angular-cli后,我得到以下错误

ERROR in Template parse errors:
Can't bind to 'index' since it isn't a known property of 'tag'. ("own)="handleKeydown($event, item)"
             (onTagEdited)="onTagEdited.emit(item)"
             [ERROR ->][index]="i"
             [attr.tabindex]="readonly ? -1 : 0"
             [class.readonly]="readonly""): TagInputComponent@16:13

ERROR in ./src/main.ts
Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory' in 'D:\xxxx\yyyy\eeeee\eeee\src'
 @ ./src/main.ts 5:0-74
 @ multi ./src/main.ts

当我运行ng build --prod时发生此错误,并且在我运行ng build时没有任何参数时工作正常,

7 个答案:

答案 0 :(得分:40)

当您在角度2中运行ng build时,最新的angular-cli会自动运行--aot参数(提前编译),因此它正在尝试优化您的代码。您有一个尚未兼容优化的软件包。所以你需要更新你的包。很可能是app.module.ts中包含**forRoot()**的软件包

我建议更新所有套餐。

更新软件包的简单方法是使用ncu npm软件包,如下所示,我从How do I correctly upgrade angular 2 (npm) to the latest version?

获取它

安装

npm install -g npm-check-updates

用法

显示

ncu

ncu -u重新编写package.json

并运行npm install来更新您的包

如果以上操作不起作用,您可能需要更新代码才能获得合规性。请参阅下面的此网址,对您的代码进行更改。  https://medium.com/@isaacplmann/getting-your-angular-2-library-ready-for-aot-90d1347bcad

答案 1 :(得分:24)

使用:

ng build --env=prod 

而不是:

ng build --prod

答案 2 :(得分:24)

我有同样的问题,我最终如何解决它是: 从node_modules中删除enhanced-resolve模块,然后运行

npm install enhanced-resolve@3.3.0

之后,aot版本按预期工作......

答案 3 :(得分:12)

面对这个问题的第二部分。

ERROR in ./src/main.ts
Can't resolve './$$_gendir/app/app.module.ngfactory'

通过将角度/ cli更新为角度4的<1.2来解决它

  1. 删除node_modules文件夹
  2. 将“@ angular / cli”:“1.0.4”更新为“@ angular / cli”:devDependencies下的package.json中的“1.2.6”
  3. 运行npm install
  4. 然后执行“ng build --prod”成功生成了生成版本。

答案 4 :(得分:2)

从Angular 6升级到7.1.4后出现相同的错误。我按照here中的说明进行操作。

返回的错误是:

ERROR in ./src/main.server.ts
Module not found: Error: Can't resolve './app/app.server.module.ngfactory'

尝试使用命令进行预渲染时。

ng run [my-project-name]:server

原因是我启用了非生产ready的Ivy Render。 通过删除行:

"angularCompilerOptions": {
  "enableIvy": true
} 

从tsconfig.json文件中,一切都恢复了正常。

答案 5 :(得分:0)

显然,这种无用且令人困惑的错误消息可能是由Angular AOT(预呈现)消耗的打字稿中的默认导出引起的。使用export default class将导致任何版本的Angular出现此错误,并且当前不受支持。您必须更改为export class

要查看问题的当前状态并查看问题是否得到解决,请参阅https://github.com/angular/angular/issues/11402。在我写这篇文章时,这个问题已经开放了两年多了,但他们确实声称有一天会得到解决。

答案 6 :(得分:0)

For me, I haven't declared my newly created component in module.ts. It worked when I declared it. Check if any of your components are not declared in module.ts.