Ionic 5 con Angular 9 - Compilazione JIT angolare non riuscita: "@ angular / compilatore" non caricato


25

Ionic 5 è stato annunciato poche ore fa (12 febbraio 2020) e ho aggiornato la mia piccola app di produzione su Ionic 5 insieme a 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

Ma quando l'ho fatto ionic serve, ho iniziato a ricevere il seguente errore:

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)

Mi sono imbattuto in alcuni problemi di Angular GitHub:

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

Stanno dicendo di includere import '@angular/compiler';nel main.tsfile ma quando ho abbinato un'altra mia applicazione Angular 9 (che ho aggiornato di recente), non vedo tali configurazioni lì.

Angular 9 non è compatibile con Ionic 5?

Risposte:


34

Soluzione aggiornata e corretta per risolvere questo problema

Sulla base della risposta di Tran Quang , sono andato a vedere CHANGELOG.md di ionic-nativee sono venuto a sapere che hanno recentemente aggiornato il loro pacchetto per compilare con Angular 9.

Quindi è necessario aggiornare qualsiasi / tutte le dipendenze di @ionic-native. Per questo, guarda tutte le dipendenze nel tuo package.gsonfile che iniziano con @ionic-native/e aggiornale una per una.

Ad esempio, questo è il mio package.gson:

inserisci qui la descrizione dell'immagine

Quindi ho dovuto eseguire i seguenti comandi per aggiornare tutte le mie @ionic-nativedipendenze:

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 stesso devi fare per le tue @ionic-nativedipendenze. Assicurati solo che quelli siano aggiornati al minimo v5.21.5(perché alcune vecchie versioni non funzionavano).

Saluti 😀🎉🎊

Se per qualche motivo, non puoi aggiornare le tue @ionic-nativedipendenze, guarda la mia risposta originale per soluzioni / soluzioni alternative ⬇️


Risposta originale

Per me, le seguenti soluzioni hanno funzionato. Non sono sicuro che siano perfetti da aggiungere, ma spero che il team Ionic lo risolva poiché queste soluzioni non erano necessarie quando ho aggiornato la mia semplice app Angular ad Angular 9.

Soluzione 1

Disattiva l'AOT passando "aot": truea "aot: falsenel angular.jsonfile. Non lo consiglierei in quanto ciò migliora le prestazioni dell'app Angular e migliora la cattura dei codici di errore in modalità di sviluppo.

Soluzione 2

Se non si desidera cambiare angular.jsone si desidera risolvere solo questo problema ionic serve, passare il --aot=falseflag al ngcomando utilizzando --:

ionic serve -- --aot=false

Soluzione 3 (opzione cieca)

Se nessuna delle soluzioni sopra funziona per te, puoi eseguire un comando npm updateche aggiornerà letteralmente tutte le dipendenze dalla tua package.json(ciò significa che anche le dipendenze ioniche verranno aggiornate).

Questa è un'opzione cieca perché non avrai idea di quali dipendenze vengono aggiornate e quali sono le modifiche di rottura in tali dipendenze aggiornate. Quindi potresti finire per risolvere altri problemi a causa di questo.

Quindi spetta a te correre questo rischio :) Bene, vale la pena farlo se la tua app non è così grande o non utilizza alcun codice che viene rimosso nelle dipendenze più recenti.

Soluzione 4 (l'ultima e la peggiore opzione)

Aggiungi import '@angular/compiler';nel main.tsfile. Ma questo potrebbe aumentare le dimensioni del pacchetto.

Extra

Mentre l'aggiornamento ionica, si potrebbe affrontare un altro problema a causa di sbagliato importin polyfills.ts. Se sì, controlla src / zone-flags.ts mancante dalla compilazione TypeScript dopo l'aggiornamento a Ionic 5


4
La soluzione 1 ha funzionato per me
John East,

La soluzione 1 ha funzionato anche
Srdan il

1
L'aggiornamento a @ ionic / native ha funzionato per me. Meglio provare a non includere il compilatore, se possibile, poiché aumenterà la dimensione del file di output.
Lee Gunn,

1
@ShashankAgrawal - ah scusa, il commento non era rivolto a te - sto solo aggiungendo peso alla "soluzione corretta" e non al semplice "includi il compilatore" che le persone potrebbero essere ancora tentate di usare.
Lee Gunn,

1
Ho preso il tuo punto @LeeGunn e va bene se non miravi alla risposta :) Perché il tuo commento mi ha fatto ripensare e ho migliorato la risposta spostando quell'opzione come ultima risorsa.
Shashank Agrawal,


2

Provate ng serve --aot, mi ha aiutato a risolvere il problema, questo è se si desidera eseguire con AOT che è raccomandato poiché sarà simile alla build di produzione e vi aiuterà a rilevare gli errori prima.

Spero che sia di aiuto.

Collegamento angolare: https://angular.io/guide/aot-compiler


Sì, sono a conoscenza di @Tony, ma la mia preoccupazione è che questo errore non sia stato visualizzato nella normale applicazione Angular quando è stato aggiornato a 9. Si è verificato solo nell'app Ionic. Potrebbe esserci qualche problema di configurazione.
Shashank Agrawal,

1

A causa dell'aggiornamento ionico non abbastanza veloce, puoi provare: npm i @ionic-native/status-bar@beta @ionic-native/splash-screen@beta @ionic-native/core@beta -Slavora per me.

update 2020/02/18 => possiamo eseguire npm i @ionic-native/status-bar @ionic-native/splash-screen @ionic-native/core -Sora per ottenere l'ultima versione stabile


È una domanda o stai cercando di rispondere a qualcosa?
Shashank Agrawal,

Vabbè, aggiornare le mie dipendenze native-ioniche alle ultime versioni stabili ha funzionato davvero per me. Nessuna delle altre soluzioni alternative qui menzionate è quindi necessaria.
FelschR,

0

è necessario aggiornare anche ionico, funzionerà. Per angolare quando aggiorna la versione aggiorna tutto da solo. Ma in caso di necessità ionica eseguire l'aggiornamento 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",

0

L'esecuzione ha npm updaterisolto il problema per me.


Sì, funzionerà anche ovviamente, perché npm updateaggiornerà letteralmente ogni singola dipendenza e non avrai idea di cosa sia aggiornato e cosa no. Ciò potrebbe anche portare ad altri errori.
Shashank Agrawal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.