几小时前(2020年2月12日),爱奥尼亚5是announced,我将我的一款小型生产应用程序升级为爱奥尼亚5和Angular 9:

# To update to Ionic 5
npm install @ionic/angular@latest @ionic/angular-toolkit@latest --save-exact --save

# To update to Angular 9
ng update @angular/core @angular/cli

但当我达到ionic serve分时,我开始出现以下错误:

Error: Angular JIT compilation failed: '@angular/compiler' not loaded!
  - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.
  - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?
  - Alternatively provide the compiler with 'import "@angular/compiler";' before bootstrapping.
    at getCompilerFacade (core.js:610)
    at Function.get (core.js:16065)
    at getInjectableDef (core.js:362)
    at injectableDefOrInjectorDefFactory (core.js:16816)

我遇到了几个问题:

  1. https://github.com/angular/angular-cli/issues/16873
  2. https://github.com/angular/angular/issues/32466

他们说在main.ts文件中包含import '@angular/compiler';个,但当我匹配我的另一个Angular 9应用程序(我最近更新了该应用程序)时,我没有看到这样的配置.

Angular 9与Ionic 5不兼容吗?

推荐答案

Updated & correct solution to fix this

根据Tran Quang的答案,我go 看了ionic-native中的CHANGELOG.md,知道他们最近更新了他们的包,用Angular 9编译.

因此,您需要更新@ionic-native的任何/所有依赖项.为此,请查看package.gson文件中以@ionic-native/开头的所有依赖项,并逐一更新它们.

例如,这是我的package.gson:

enter image description here

因此,我必须运行以下命令来更新我的@ionic-native个依赖项:

npm i @ionic-native/core@latest
npm i @ionic-native/camera@latest
npm i @ionic-native/firebase-x@latest
npm i @ionic-native/splash-screen@latest
npm i @ionic-native/status-bar@latest

对于@ionic-native个依赖项,你也必须这样做.只需确保这些版本至少更新到v5.21.5(因为一些旧版本不起作用).

干杯???

如果出于某种原因,您无法更新@ionic-native个依赖项,请查看我针对不同解决方案的原始答案⬇️


Original Answer

对我来说,以下解决方案奏效了.不确定它们是否可以完美添加,但希望爱奥尼亚团队能够解决这个问题,因为当我将我的纯Angular应用升级到Angular 9时,这些解决方案并不需要.

解决方案1

通过在angular.json文件中将"aot": true更改为"aot: false来关闭AOT.我不建议这样做,因为这样可以提高Angular应用程序的性能,并改善开发模式中错误代码的捕获.

解决方案2

如果您不想在angular.json中更改,并且只想在ionic serve中解决此问题,请使用----aot=false标志传递给ng命令:

ionic serve -- --aot=false

解决方案3(盲选)

如果上述解决方案都不适用于您,您可以运行命令npm update,该命令将更新package.json中的所有依赖项(也就是说,ionic 依赖项也将被更新).

这是一个盲目的 Select ,因为您不知道哪些依赖项被更新,以及这些更新的依赖项中有哪些突破性的变化.因此,您可能会因此解决其他问题.

所以,这取决于你是否要承担这个风险:)好吧,如果你的应用程序没有那么大,或者没有使用新的依赖项中删除的任何代码,那么这是值得的.

Solution 4 (the last & worst option)

main.ts文件中添加import '@angular/compiler';.但这会增加束的大小.

Extra

升级Ionic时,您可能会因为polyfills.ts中的import错误而面临另一个问题.如果是,请查看src/zone-flags.ts is missing from the TypeScript compilation after upgrading to Ionic 5

Typescript相关问答推荐

如何在类型脚本中声明对象其键名称不同但类型相同?

从接口创建类型安全的嵌套 struct

使某些类型的字段变为可选字段'

返回同时具有固定键和变量键的对象的函数的返回类型

创建一个根据布尔参数返回类型的异步函数

在映射类型中用作索引时,TypeScrip泛型类型参数无法正常工作

不推荐使用Marker类-Google map API警告

APIslice-CreateAPI的RTK打字错误

打印脚本中的动态函数重载

错误TS2403:后续变量声明必须具有相同的类型.变量';CRYPTO';的类型必须是';CRYPATO';,但这里的类型是';CRYPATO';

如何在深度嵌套的Reaction路由对象中隐藏父级?

ApexCharts条形图未显示最小值.负值

接口重载方法顺序重要吗?

如何使用模板继承从子组件填充基础组件的画布

@TANSTACK/REACT-QUERY中发生Mutations 后的数据刷新问题

我在Angular 17中的environment.ts文件中得到了一个属性端点错误

错误:NG02200:找不到类型为';对象';的其他支持对象';[对象对象]';.例如数组

我不明白使用打字脚本在模板中展开参考

如何正确地将元组表格输入到对象数组实用函数(如ZIP)中,避免在TypeScrip 5.2.2中合并所有值

我可以使用对象属性的名称作为对象中的字符串值吗?