Açısal 9 ile İyonik 5 - Açısal JIT derlemesi başarısız oldu: '@ açısal / derleyici' yüklenmedi


23

Ionic 5 birkaç saat önce açıklandı (12 Şubat 2020) ve küçük üretim uygulamamdan birini Açısal 9 ile birlikte Ionic 5'e yükselttim:

# 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

Ama yaptığımda ionic serve, feryat hatasını almaya başladım:

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)

Birkaç Açısal GitHub sorunuyla karşılaştım:

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

Onlar içerecek şekilde söylediğini import '@angular/compiler';de main.tsdosyaya ama (Geçenlerde güncellenir) benim diğer Açısal 9 uygulamanın birini eşleşti zaman, orada böyle yapılandırmaları görmüyorum.

Angular 9, Ionic 5 ile uyumlu değil mi?

Yanıtlar:


33

Bunu düzeltmek için güncellenmiş ve doğru çözüm

Dan cevap dayanarak Tran Quang , ben görmeye gitti CHANGELOG.md arasında ionic-nativeve son zamanlarda açısal 9 ile derlemek için kendi paketi güncellenmiş olduğunu bilmek geldi.

Bu nedenle, herhangi bir / tüm bağımlılıklarını güncellemeniz gerekir @ionic-native. Bunun için package.gsondosyanızla başlayan @ionic-native/ve bunları tek tek güncelleyen tüm bağımlılıklara bakın .

Örneğin, bu benim package.gson:

resim açıklamasını buraya girin

Bu yüzden tüm @ionic-nativebağımlılıklarımı güncellemek için aşağıdaki komutları çalıştırmak zorunda kaldım :

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

Aynı şekilde @ionic-nativebağımlılıklarınız için de yapmanız gerekir . Bunların minimum olarak güncellendiğinden emin olun v5.21.5(çünkü birkaç eski sürüm çalışmadı).

Şerefe 😀🎉🎊

Herhangi bir nedenle @ionic-nativebağımlılıklarınızı güncelleyemiyorsanız, farklı geçici çözümler / çözümler için orijinal yanıtıma bakın ⬇️


Orijinal Yanıt

Benim için aşağıdaki çözümler işe yaradı. Eklemek için mükemmel olup olmadıklarından emin değilim ama İyonik ekibin bunu çözeceğini umuyorum, çünkü düz Angular uygulamamı Açısal 9'a yükselttiğimde bu çözümler gerekli değildi.

Çözüm 1

Değiştirerek AOT kapatın "aot": trueiçin "aot: falsede angular.jsondosyaya. Bu, Açısal uygulamanın performansını geliştirdiği ve geliştirme modunda hata kodlarının yakalanmasını geliştirdiği için bunu önermem.

Çözüm 2

Değiştirmek istemiyorsanız angular.jsonve bu sorunu ionic serveyalnızca düzeltmek istiyorsanız , --aot=falseşu ngkomutu kullanarak bayrağını iletin --:

ionic serve -- --aot=false

Çözüm 3 (kör seçenek)

Yukarıdaki çözümlerin hiçbiri sizin için çalışmıyorsa, npm updatetüm bağımlılıkları tam anlamıyla güncelleyecek bir komut çalıştırabilirsiniz package.json(yani, İyonik bağımlılıklar da güncellenecektir).

Bu kör bir seçenektir, çünkü hangi bağımlılıkların güncellendiğini ve bu güncellenmiş bağımlılıklarda meydana gelen değişikliklerin neler olduğunu bilmezsiniz. Bu nedenle, bu nedenle diğer sorunları çözebilirsiniz.

Yani bu riski almak size kalmış :) Peki, uygulamanız o kadar büyük değilse veya daha yeni bağımlılıklarda kaldırılan kodları kullanmıyorsa, bu yapmaya değer.

Çözüm 4 (son ve en kötü seçenek)

Ekle import '@angular/compiler';yılında main.tsdosyasında. Ama bu belki bohça boyutunu artırmak.

Ekstra

Ionic'i yükseltirken, yanlış importgiriş nedeniyle başka bir sorunla karşılaşabilirsiniz polyfills.ts. Evetse, Ionic 5'e yükselttikten sonra TypeScript derlemesinde src / zone-flags.ts eksik olduğuna bakın


4
Çözüm 1 benim için çalıştı
John East

Çözüm 1 de çalıştı
Srdan

1
@ İyonik / yerli yükseltme benim için çalıştı. Denemek ve mümkün olduğunca derleyici dahil etmeyin en iyi çıktı dosya boyutunu artıracaktır.
Lee Gunn

1
@ShashankAgrawal - ah üzgünüm, yorum size yönelik değildi - Ben sadece "doğru çözüm" kilo ekliyorum ve insanların hala kullanmak için cazip olabilir kolay "derleyici dahil" değil.
Lee Gunn

1
@LeeGunn'a dikkatinizi çekti ve cevabı hedeflemediyseniz sorun değil :) Çünkü yorumunuz beni yeniden düşünmeye itti ve bu seçeneği son çare olarak taşıyarak cevabı geliştirdim.
Shashank Agrawal

5

Açısal için: Terminali durdurmak ve yeniden servis yapmak ng servesorunu benim için çözdü.


Efendim, efsanesiniz, ne kadar zaman kaybettiğimi bilmiyorsunuz ve bunu yapabilirdim. Teşekkür ederim!
Ruben Szekér

Teşekkür ederim, bu benim için zevk :)
M Fuat NUROĞLU

2

Deneyin ng serve --aot, sorunu düzeltmeme yardımcı oldu, eğer üretim yapısına benzer olacağı ve daha erken hataları yakalamanıza yardımcı olacağı için önerilen aot ile çalıştırmak istiyorsanız.

Bu yardımcı olur umarım.

Açısal Bağlantı: https://angular.io/guide/aot-compiler


Evet, @Tony'nin farkındayım ama endişem bu hatanın neden 9'a yükseltildiğinde normal Açısal uygulamada görünmediğidir. Sadece İyonik uygulamada meydana geldi. Bazı yapılandırma sorunları olabilir.
Shashank Agrawal

1

İyonik güncelleme yeterince hızlı olmadığı için deneyebilirsiniz: npm i @ionic-native/status-bar@beta @ionic-native/splash-screen@beta @ionic-native/core@beta -Sbenim için çalış .

update 2020/02/18 => npm i @ionic-native/status-bar @ionic-native/splash-screen @ionic-native/core -Sson kararlı sürümü almak için şimdi çalışabiliriz


Bu bir soru mu yoksa bir şeyi cevaplamaya mı çalışıyorsunuz?
Shashank Agrawal

Oh, @ ionic-native bağımlılıklarımı en son kararlı sürümlere güncellemek benim için gerçekten işe yaradı. Burada bahsedilen diğer geçici çözümlerden hiçbirine gerek yoktur.
FelschR

0

İyonik de güncellenmesi gerekiyor, işe yarayacak. Açısal güncelleme sürümü için bağımlı tüm kendini günceller. Ancak iyonik olarak manuel güncelleme gerekiyor.

"@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

Koşu npm updatebenim için sorunu çözdü.


Evet, bu da elbette işe yarayacak, çünkü npm updateher bağımlılığı kelimenin tam anlamıyla güncelleyecek ve neyin güncellenip neyin güncellenmediğine dair bir fikriniz olmayacak. Bu başka hatalara da yol açabilir.
Shashank Agrawal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.