Ionic 5 з кутовою 9 - Компіляція кутового JIT не вдалася: "@ angular / компілятор" не завантажено


23

Ionic 5 було оголошено кілька годин тому (12 лютого 2020 року), і я оновив один із невеликих виробничих додатків до Ionic 5 разом із кутовим 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)

Я зіткнувся з декількома проблемами з кутовим GitHub:

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

Вони говорять про включення import '@angular/compiler';у main.tsфайл, але коли я відповідав одному з інших моїх додатків Angular 9 (який я нещодавно оновив), я не бачу таких конфігурацій.

Чи Angular 9 не сумісний з Ionic 5?

Відповіді:


33

Оновлено та правильне рішення, щоб виправити це

На підставі відповіді від Tran Quang , я пішов до CHANGELOG.md з ionic-nativeі дізнався , що вони недавно оновили свій пакет для компіляції з кутовими 9.

Отже, вам потрібно оновити будь-які / всі залежності @ionic-native. Для цього подивіться на всі залежності у вашому package.gsonфайлі, які починаються з них, @ionic-native/і оновлюйте їх по черзі.

Наприклад, це моє package.gson:

введіть тут опис зображення

Тому мені довелося виконати наступні команди, щоб оновити всі мої @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залежності, подивіться на мою оригінальну відповідь щодо різних способів вирішення /


Оригінальний відповідь

Для мене спрацювали наступні рішення. Не впевнений, чи їх ідеально додати, але сподіваюся, що команда Ionic це виправить, оскільки ці рішення не потрібні були, коли я модернізував звичайний додаток Angular до Angular 9.

Рішення 1

Вимкніть АОТ шляхом зміни "aot": trueв "aot: falseв angular.jsonфайлі. Я б не рекомендував цього, оскільки це покращує продуктивність програми Angular та покращує введення кодів помилок у режимі розробки.

Рішення 2

Якщо ви не хочете змінюватись angular.jsonі хочете виправити цю проблему ionic serveлише для цього , передайте --aot=falseпрапор ngкоманді за допомогою --:

ionic serve -- --aot=false

Рішення 3 (сліпий варіант)

Якщо жодне з вищезгаданих рішень не працює для вас, ви можете запустити команду, npm updateяка буде оновлювати буквально всі залежності від ваших package.json(це означає, що іонічні залежності також будуть оновлені).

Це сліпий варіант, тому що ви не матимете уявлення про те, які залежності оновлюються та які суттєві зміни в цих оновлених залежностях. Тому ви можете вирішити інші проблеми через це.

Отже, ви ризикуєте взяти цей ризик :) Ну, це варто зробити, якщо ваш додаток не настільки великий чи не використовуєте жодних кодів, які видаляються в нових залежностях.

Рішення 4 (останній і найгірший варіант)

Додати import '@angular/compiler';у main.tsфайл. Але це може збільшити розмір пакета.

Додатково

При оновленні іонного, ви можете зіткнутися з іншим питанням з - за неправильні importв polyfills.ts. Якщо так, перевірте src / zone-flags.ts відсутній у компіляції TypeScript після оновлення до Ionic 5


4
Рішення 1 працювало на мене
Джон Схід

Рішення 1 також працювало
Srdan

1
Для мене працювало оновлення @ ionic / native. Найкраще спробувати і не включати компілятор, якщо це можливо, оскільки це збільшить розмір вихідного файлу.
Лі Ганн

1
@ShashankAgrawal - ах вибачте, коментар не був спрямований на вас - я просто додаю ваги "правильному рішенню", а не простому "включенню компілятора", який люди все-таки можуть спокусити використати.
Лі Ганн

1
Я зрозумів вашу думку @LeeGunn, і це нормально, якщо ви не ставили собі за мету відповідь :) Тому що ваш коментар змусив мене переосмислитись, і я покращив відповідь, перемістивши цей варіант як крайній спосіб.
Шашанк Агравал

5

Для Angular: Припинення терміналу та його повторне обслуговування ng serveвирішили проблему для мене.


Ви, сер, легенда, ви не знаєте, скільки часу я втратив, і я міг би це зробити. Дякую!
Рубен Шекер

Дякую, мені приємно :)
M Fuat NUROĞLU

2

Спробуйте ng serve --aot, це допомогло мені виправити проблему, ось якщо ви хочете працювати з aot, що рекомендується, оскільки це буде подібне до збірки виробництва, і це допоможе вам швидше виявити помилки.

Сподіваюсь, це допомагає.

Кутове посилання: https://angular.io/guide/aot-compiler


Так, мені відомо про @Tony, але я занепокоєний тим, що ця помилка не з’явилася в звичайній програмі Angular при її оновленні до 9. Вона сталася лише в додатку Ionic. Може виникнути проблема з конфігурацією.
Шашанк Агравал

1

Через іонне оновлення недостатньо швидко, ви можете спробувати: npm i @ionic-native/status-bar@beta @ionic-native/splash-screen@beta @ionic-native/core@beta -S працюйте на мене.

update 2020/02/18 => ми можемо запустити npm i @ionic-native/status-bar @ionic-native/splash-screen @ionic-native/core -Sзараз, щоб отримати останню стабільну версію


Це питання чи ви намагаєтесь щось відповісти?
Шашанк Агравал

Ну добре, оновлення моїх @ ionic-native залежності до останніх стабільних версій насправді працювало для мене. Жоден з інших способів вирішення тут не потрібен.
FelschR

0

також потрібно оновити іонний, воно буде працювати. Для кутових під час оновлення версія оновлює всі залежні від себе. Але в іонному потрібно оновлювати вручну.

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

Запуск npm updateвирішив проблему для мене.


Так, це також буде працювати, звичайно, тому що npm updateбуде буквально оновлювати кожну та кожну залежність, і ви не матимете уявлення про те, що оновлено та що ще. Це також може призвести до інших помилок.
Шашанк Агравал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.