私はAngular 8をng update
を使用して8にアップグレードしました。それは、マイグレーションスクリプトを実行し、(とりわけ)polyfills.ts
のes6/es7インポートを削除しました。私が読んだものから、 Angularは、古いブラウザー(IE11を含む)用の特別なビルドを作成し、ポリフィルについて心配する必要はありませんか?代わりにbrowserlist
をnot IE 9-10
に更新しましたのnot IE 9-11
から(私は推測)、適切なポリフィルを構築する必要があるというヒント。
残念ながら、ng build
を実行すると、ポリフィル関連のエラーが発生します。 Reflect.getMetadata is not a function
およびObject doesn't support property or method 'includes'
。 reflect
とarray
のインポートをポリフィルに戻し、それらのエラーを回避しようとしましたが、他のエラーが発生しました。どうしたんだ?ポリフィルを含めるかどうか
Angular 8をIE11で動作させるにはどうすればよいですか?
IE 11をAngular 8で動作させる1つの方法は、無効にすることです差分読み込み。
以下をせよ:
tsconfig.json
と"target": "es5"
polyfills.ts
とimport 'core-js'; // core-js@^3.1.4
IE11などのES5ブラウザーやChromeやFirefoxなどの最新のES2015 +ブラウザーにアプリを提供する場合は、追加のビルド構成をangular.jsonに追加して、アプリのES5バンドルを提供します。
architect
セクションに新しい「es5」設定を追加します。{
"projects": {
"my-app": {
"architect": {
"build": {
"configurations": {
"es5" : {
"tsConfig": "tsconfig.app.es5.json"
}
}
},
"serve": {
"configurations": {
"es5": {
"browserTarget": "my-app:build:es5"
}}}}}}}
tsconfig.app.es5.json
とともにangular.json
を作成します。{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"target": "es5"
}
}
browserslist
を更新してIE 11のサポートを有効にします。browserslistがangular.json
ファイルとともにアプリのルートディレクトリにあることを確認してください。例:not IE 9-10 # For IE 9-11 support, remove 'not'.
IE 11
package.json
に追加します。"scripts": {
"build": "ng build",
"buildES5": "ng build --configuration=es5",
"start": "ng serve",
"startES5": "ng serve --configuration=es5",
}
これで、ES5のみをサポートするレガシーブラウザーまたはES2015 +をサポートする最新のブラウザー用にアプリを作成して提供できます。
npm run build
は、最新のブラウザ用にアプリを構築しますnpm run buildES5
はレガシーブラウザ用のアプリを構築しますnpm run start
は、最新のブラウザー向けにアプリを作成して提供しますnpm run startES5
は、レガシーブラウザ用のアプリを構築して提供しますお望みならば ng serve
デフォルトで「es5」のアプリをビルドします。
angular.json
"architect": {
"build": {
...
"configurations": {
"development": {
"tsConfig": "tsconfig-es5.app.json"
},
...
}
},
"serve": {
...
"options": {
"browserTarget": "bludesk-web:build:development"
},
...
}
ブラウザリスト
...
IE 11
not IE 9-10
tsconfig-es5.app.json
{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"target": "es5"
}
}
次のようにして、polyfill.ts
のIE 11
に関する問題を解決しました:
npm install --save web-animations-js
を実行しますimport 'web-animations-js'
内の行polyfill.ts
のコメントを外しますtarget
の値をtsconfig.json
内の'es2015'から 'es5'に変更します。IE 11
には 'es5'が必要です。