Ionic 5 with Angular 9-Angular JITコンパイルが失敗しました: '@ angular / compiler'がロードされていません


25

Ionic 5は数時間前(2020年2月12日)に発表され、小規模な本番用アプリの1つをAngular 9とともにIonic 5にアップグレードしました。

# 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)

Angular GitHubの問題をいくつか見つけました:

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

彼らは含めるように言っているimport '@angular/compiler';main.tsファイルが、私は(私は最近更新)私の他の角度9アプリケーションの一つにマッチしたとき、私はそこにそのような構成が表示されません。

Angular 9はIonic 5と互換性がありませんか?

回答:


34

これを修正するための更新された正しいソリューション

以下からの回答に基づいてトラン・クアン、私が見に行ったCHANGELOG.mdのをionic-native、彼らは最近の角9を使用してコンパイルするために彼らのパッケージを更新することを知るようになりました。

したがって、のすべての依存関係を更新する必要があります@ionic-native。これについては、package.gsonファイル内のすべての依存関係を調べ、@ionic-native/それらを1つずつ更新します。

たとえば、これは私のもの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をオフ"aot": true"aot: falseangular.jsonます。Angularアプリのパフォーマンスが向上し、開発モードでのエラーコードのキャッチが向上するため、これはお勧めしません。

解決策2

変更したくなく、angular.jsonこの問題ionic serveのみを修正したい場合は--aot=falseng次のコマンドを使用してコマンドにフラグを渡し--ます。

ionic serve -- --aot=false

解決策3(ブラインドオプション)

上記の解決策がどれも機能しない場合は、コマンドnpm updateを実行して、文字通りすべての依存関係を更新しますpackage.json(つまり、Ionicの依存関係も更新されます)。

どの依存関係が更新され、それらの更新された依存関係の重大な変更点が何かはわからないため、これはブラインドオプションです。したがって、このために他の問題を修正してしまう可能性があります。

したがって、このリスクを負うのはあなた次第です:)さて、アプリがそれほど大きくない場合、または新しい依存関係で削除されたコードを使用していない場合、これは実行する価値があります。

解決策4(最後で最悪のオプション)

ファイルに追加import '@angular/compiler';main.tsます。ただし、これによりバンドルサイズ大きくなる可能性があります。

追加

Ionicのアップグレード中に、の誤りimportが原因で別の問題が発生する場合がありますpolyfills.ts。はいの場合、Ionic 5へのアップグレード後にTypeScriptコンパイルからsrc / zone-flags.tsが欠落していることを確認してください。


4
解決策1がうまくいった
ジョンイースト

ソリューション1も機能した
スルダン

1
@ ionic / nativeのアップグレードがうまくいきました。出力ファイルのサイズが大きくなるので、可能であればコンパイラを含めないでください。
Lee Gunn

1
@ShashankAgrawal-申し訳ありませんが、コメントはあなたを対象としていませんでした-私は単に「正しい解決策」に重みを加えており、人々がまだ使いたがるような簡単な「コンパイラを含める」のではありません。
Lee Gunn

1
私はあなたのポイント@LeeGunnを得ました、そしてあなたが答えを目指していなかったとしてもそれは大丈夫です:)あなたのコメントは私に再考させ、私は最後の手段としてそのオプションを動かすことによって答えを改善しました。
Shashank Agrawal

5

Angularの場合:端末を停止して再予約するとng serve、問題が解決しました。


あなたは伝説であり、あなたは私がどれだけの時間を失ったかわからず、私はこれを行うことができたでしょう。ありがとうございました!
RubenSzekér

ありがとう、それは私の喜びです:)
M FuatNUROĞLU

2

試してみてくださいng serve --aot、それは私が問題を修正するのに役立ちました、それはそれが生産ビルドに似ているので推奨されるaotで実行したい場合であり、それはエラーをより早く見つけるのに役立ちます。

お役に立てれば。

Angular Link:https : //angular.io/guide/aot-compiler


はい、私は@Tonyを知っていますが、9にアップグレードしたときにこのエラーが通常のAngularアプリケーションで表示されなかったのはなぜかということです。Ionicアプリでのみ発生しました。構成の問題である可能性があります。
Shashank Agrawal

1

イオン更新が十分に速くないため、試してみてください: npm i @ionic-native/status-bar@beta @ionic-native/splash-screen@beta @ionic-native/core@beta -S私のために働いてください。

2020/02/18の更新=>実行npm i @ionic-native/status-bar @ionic-native/splash-screen @ionic-native/core -Sして最新の安定バージョンを取得できます


これは質問ですか、それとも何か答えようとしていますか?
Shashank Agrawal

ええと、@ ionic-nativeの依存関係を最新の安定したバージョンに更新すると、実際にうまくいきました。この場合、ここで説明した他の回避策は必要ありません。
FelschR

0

イオンも更新する必要があります、それは動作します。Angularの場合、バージョンを更新すると、依存するすべてのものが更新されます。しかし、イオンでは手動で更新する必要があります。

"@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ます。文字通りすべての依存関係を更新し、何が更新され、何が更新されないかがわからなくなるからです。また、他のエラーにつながる可能性があります。
Shashank Agrawal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.