2

我见过很多 AoT 编译由于某种原因而失败或产生奇怪的运行时错误的情况。我有相反的问题:我的应用程序在非 AoT 模式下失败并出现错误:

无法解析 ConfirmRemoveService (?) 的所有参数

无论我的目标是开发还是生产,无论我使用的是环境dev还是prod环境,都会发生这种情况。例如,只要我还明确打开 AoT,纯开发构建就会成功:

ng serve -dev --aot

上面的?错误消息中MatDialog的 Angular Material2 库中的 type 。(这ConfirmRemoveService是组件用来建立模态对话框的服务。)

此问题可能与升级到该库的 beta 11 版本有关,也可能无关。它可能与我从一个MaterialModule直接从库中直接导入的更改(因为MaterialModule现在已被删除)更改为我自己的模块,该模块导入单个 Angular Material2 模块,例如MatDialogModule;然后我在必要时导入该模块。但是,这些都不会阻止应用程序在 AoT 模式下运行。它只是在非 AoT 模式下才会出现错误。

有谁知道这种问题只能在非 AoT 场景中发生的场景,为什么?

4

1 回答 1

0

这个问题原来是由于缺少一行tsconfig.json

"emitDecoratorMetadata": true

我想我在某个时候删除了这个,认为只有在编译 Angular 友好的库时才需要它。

我的怀疑是在 AoT 下运行时,ngc使用而不是tsc,并且ngc默认提供此设置,因此仅在非 AoT 模式下才会出现该错误。

于 2017-10-02T04:16:47.940 回答