Ionic 5 con Angular 9 - Error en la compilación de JIT angular: '@ angular / compiler' no cargado

25

Ionic 5 se anunció hace unas horas (12 de febrero de 2020) y actualicé mi aplicación de producción pequeña a Ionic 5 junto con 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

Pero cuando lo hice ionic serve, comencé a recibir el siguiente error:

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)

Me encontré con algunos problemas de Angular GitHub:

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

Dicen que deben incluirse import '@angular/compiler';en el main.tsarchivo, pero cuando emparejé una de mis otras aplicaciones de Angular 9 (que actualicé recientemente), no veo tales configuraciones allí.

¿Angular 9 no es compatible con Ionic 5?

Shashank Agrawal
fuente

Respuestas:

34

Solución actualizada y correcta para solucionar esto

Sobre la base de la respuesta de Tran Quang , fui a ver el CHANGELOG.md de ionic-nativey llegué a conocer que recientemente actualizó su paquete para compilar con 9 angular.

Por lo tanto, debe actualizar cualquiera / todas las dependencias de @ionic-native. Para esto, mire todas las dependencias en su package.gsonarchivo que comienzan con @ionic-native/y actualícelas una por una.

Por ejemplo, este es mi package.gson:

ingrese la descripción de la imagen aquí

Así que tuve que ejecutar los siguientes comandos para actualizar todas mis @ionic-nativedependencias:

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

Lo mismo que tienes que hacer para tus @ionic-nativedependencias. Solo asegúrese de que se actualicen como mínimo v5.21.5(porque algunas versiones antiguas no funcionaban).

Saludos 😀🎉🎊

Si por alguna razón no puede actualizar sus @ionic-nativedependencias, mire mi respuesta original para diferentes soluciones / soluciones ⬇️


Respuesta original

Para mí, las siguientes soluciones funcionaron. No estoy seguro de si son perfectos para agregar, pero espero que el equipo de Ionic arregle esto, ya que estas soluciones no eran necesarias cuando actualicé mi aplicación Angular simple a Angular 9.

Solución 1

Apague el AOT cambiando "aot": truea "aot: falseen el angular.jsonarchivo. No recomendaría esto, ya que esto mejora el rendimiento de la aplicación Angular y mejora la captura de códigos de error en modo de desarrollo.

Solución 2

Si no desea cambiar angular.jsony quiere solucionar este problema ionic servesolo, pase la --aot=falsebandera al ngcomando usando --:

ionic serve -- --aot=false

Solución 3 (opción ciega)

Si ninguna de las soluciones anteriores funciona para usted, puede ejecutar un comando npm updateque actualizará literalmente todas las dependencias de su parte package.json(eso significa que las dependencias iónicas también se actualizarán).

Esta es una opción ciega porque no tendrá una idea de qué dependencias se actualizan y cuáles son los cambios importantes en esas dependencias actualizadas. Por lo tanto, podría terminar arreglando otros problemas debido a esto.

Así que depende de usted correr este riesgo :) Bueno, vale la pena hacerlo si su aplicación no es tan grande o no usa ningún código que se elimine en las dependencias más nuevas.

Solución 4 (la última y peor opción)

Agregar import '@angular/compiler';en el main.tsarchivo. Pero esto podría aumentar el tamaño del paquete.

Extra

Mientras actualiza Ionic, puede enfrentar otro problema debido a un error importen polyfills.ts. En caso afirmativo, echa un vistazo a src / zone-flags.ts en la compilación de TypeScript después de actualizar a Ionic 5

Shashank Agrawal
fuente
44
La solución 1 funcionó para mí
John East
La solución 1 también funcionó
Srdan
1
La actualización de @ ionic / native funcionó para mí. Lo mejor es intentar y no incluir el compilador si es posible, ya que aumentará el tamaño del archivo de salida.
Lee Gunn
1
@ShashankAgrawal - ah lo siento, el comentario no estaba dirigido a ti - solo estoy agregando peso a la "solución correcta" y no es fácil "incluir el compilador" que la gente aún podría estar tentada a usar.
Lee Gunn
1
Entendí tu punto @LeeGunn y está bien si no estabas apuntando a la respuesta :) Porque tu comentario me hizo repensar y mejoré la respuesta moviendo esa opción como último recurso.
Shashank Agrawal
5

Para Angular: detener el terminal y volver a servirlo ng serveresolvió el problema para mí.

M Fuat NUROĞLU
fuente
Usted señor, es una leyenda, no tiene idea de cuánto tiempo he perdido y podría haber hecho esto. ¡Gracias!
Ruben Szekér
Gracias, es un placer :)
M Fuat NUROĞLU
2

Intento ng serve --aot, me ayudó a solucionar el problema, eso es si quieres ejecutar con algo que se recomienda, ya que será similar a la compilación de producción y te ayudará a detectar errores antes.

Espero que esto ayude.

Enlace angular: https://angular.io/guide/aot-compiler

Tony
fuente
Sí, estoy al tanto de @Tony, pero mi preocupación es por qué este error no apareció en la aplicación Angular normal cuando se actualizó a 9. Solo ocurrió en la aplicación Ionic. Puede haber algún problema de configuración.
Shashank Agrawal
1

Debido a que la actualización iónica no es lo suficientemente rápida, puede intentar: npm i @ionic-native/status-bar@beta @ionic-native/splash-screen@beta @ionic-native/core@beta -S trabaja para mí.

actualización 2020/02/18 => podemos ejecutar npm i @ionic-native/status-bar @ionic-native/splash-screen @ionic-native/core -Sahora para obtener la última versión estable

Trần Quang Hiệp
fuente
¿Es esta una pregunta o estás tratando de responder algo?
Shashank Agrawal
Bueno, actualizar mis dependencias nativas iónicas @ a las últimas versiones estables realmente funcionó para mí. Ninguna de las otras soluciones mencionadas aquí son necesarias entonces.
FelschR
0

necesita actualizar iónico también, funcionará. Para angular cuando se actualiza la versión, actualiza todos los dependientes. Pero en ionic necesita actualizarse manualmente.

"@angular/common": "9.0.5",
    "@angular/core": "9.0.5",
    "@angular/forms": "9.0.5",
    "@angular/platform-browser": "9.0.5",
    "@angular/platform-browser-dynamic": "9.0.5",
    "@angular/router": "9.0.5",
    "@ckeditor/ckeditor5-angular": "1.2.2",
    "@ckeditor/ckeditor5-build-classic": "17.0.0",
    "@ionic-native/camera": "5.22.0",
    "@ionic-native/core": "5.22.0",
    "@ionic-native/crop": "5.22.0",
    "@ionic-native/device": "5.22.0",
    "@ionic-native/diagnostic": "5.22.0",
    "@ionic-native/document-viewer": "5.22.0",
    "@ionic-native/file": "5.22.0",
    "@ionic-native/file-opener": "5.22.0",
    "@ionic-native/file-path": "5.22.0",
    "@ionic-native/file-transfer": "5.22.0",
    "@ionic-native/fingerprint-aio": "5.22.0",
    "@ionic-native/image-picker": "5.22.0",
    "@ionic-native/in-app-browser": "5.22.0",
    "@ionic-native/network": "5.22.0",
    "@ionic-native/splash-screen": "5.22.0",
    "@ionic-native/status-bar": "5.22.0",
    "@ionic-native/toast": "5.22.0",
Shyam Vashista
fuente
0

Correr npm updatesolucionó el problema para mí.

HaniBhat
fuente
Sí, eso también funcionará, por supuesto, porque npm updateliteralmente actualizará todas y cada una de las dependencias y no tendrá una idea de qué está actualizado y qué no. Eso también podría conducir a otros errores.
Shashank Agrawal