我见过许多AoT编译因某种原因失败的情况,或者产生了一个奇怪的运行时错误。我有相反的问题:我的应用在非AoT模式下失败并出现错误:
无法解析ConfirmRemoveService(?)
的所有参数
无论我是针对开发还是制作,以及我是否使用dev
或prod
环境,都会出现这种情况。例如,只要我也明确打开AoT,纯粹的dev构建就会成功:
ng serve -dev --aot
上面的错误消息中的?
引用了Angular Material2库中的类型MatDialog
。 (此ConfirmRemoveService
是组件用于建立模态对话框的服务。)
此问题可能与升级到该库的beta 11版本有关,也可能与此无关。它可能与我从MaterialModule
直接从库中导入更改有关,因为MaterialModule
现已被删除,我自己的模块会导入单个Angular Material2模块,例如{{1 }};然后我在必要时导入该模块。但是,这些都不会阻止应用程序在AoT模式下运行;只是在非AoT模式下,错误才会显现出来。
是否有人意识到只有在非AoT场景中才会出现此类问题的情况,为什么?
答案 0 :(得分:0)
此问题原因是tsconfig.json
中缺少一行:
"emitDecoratorMetadata": true
我认为我在一些家务管理中删除了这一点,认为只有在编译Angular友好库时才有必要。
我怀疑在AoT下运行时,ngc
代替tsc
,而ngc
默认提供此设置,因此只会在非AoT中显示错误模式。