Je suis passé à Angular 8 en utilisant ng update
. Il a exécuté ses scripts de migration qui, entre autres, ont supprimé les importations es6/es7 dans polyfills.ts
. D'après ce que j'ai lu, Angular créera une version spéciale pour les navigateurs plus anciens (y compris IE11) et je n'ai plus à me soucier des polyfills? J'ai mis à jour browserlist
pour être not IE 9-10
au lieu de not IE 9-11
à (je présume) un indice qu'il devrait créer les polyfills appropriés.
Malheureusement, après avoir exécuté ng build
, J'obtiens des erreurs liées au polyfill, par exemple. Reflect.getMetadata is not a function
et Object doesn't support property or method 'includes'
. J'ai essayé de replacer les importations reflect
et array
dans les polyfills et de contourner ces erreurs, mais j'en reçois d'autres. Quel est le problème? Suis-je censé inclure des polyfills ou non?
Comment faire fonctionner Angular 8 avec IE11?
Une façon de faire fonctionner IE 11 avec Angular 8 consiste à désactiver chargement différentiel.
Procédez comme suit:
tsconfig.json
avec "target": "es5"
polyfills.ts
avec import 'core-js'; // core-js@^3.1.4
Si vous souhaitez servir votre application aux navigateurs ES5 comme IE11 ainsi qu'aux navigateurs ES2015 + modernes comme Chrome et Firefox, ajoutez une configuration de construction supplémentaire à votre angular.json pour servir le bundle ES5 de votre application.
architect
de angular.json:{
"projects": {
"my-app": {
"architect": {
"build": {
"configurations": {
"es5" : {
"tsConfig": "tsconfig.app.es5.json"
}
}
},
"serve": {
"configurations": {
"es5": {
"browserTarget": "my-app:build:es5"
}}}}}}}
tsconfig.app.es5.json
aux côtés de angular.json
:{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"target": "es5"
}
}
browserslist
pour activer IE 11 support. Assurez-vous que la liste des navigateurs se trouve dans le répertoire racine de votre application, à côté du angular.json
fichier. Par exemple:not IE 9-10 # For IE 9-11 support, remove 'not'.
IE 11
package.json
pour utiliser la configuration ES5 que vous avez créée à l'étape 1:"scripts": {
"build": "ng build",
"buildES5": "ng build --configuration=es5",
"start": "ng serve",
"startES5": "ng serve --configuration=es5",
}
Vous pouvez désormais créer et diffuser votre application pour les navigateurs hérités qui ne prennent en charge que ES5 ou les navigateurs modernes qui prennent en charge ES2015 +:
npm run build
crée votre application pour les navigateurs modernesnpm run buildES5
crée votre application pour les anciens navigateursnpm run start
crée et sert votre application pour les navigateurs modernesnpm run startES5
crée et sert votre application pour les anciens navigateursSi tu veux ng serve
pour construire l'application pour "es5" par défaut.
angular.json
"architect": {
"build": {
...
"configurations": {
"development": {
"tsConfig": "tsconfig-es5.app.json"
},
...
}
},
"serve": {
...
"options": {
"browserTarget": "bludesk-web:build:development"
},
...
}
liste de navigateurs
...
IE 11
not IE 9-10
tsconfig-es5.app.json
{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"target": "es5"
}
}
J'ai résolu mon polyfill.ts
problèmes avec IE 11
en procédant comme suit:
npm install --save web-animations-js
import 'web-animations-js'
à l'intérieur polyfill.ts
target
de 'es2015' à 'es5' à l'intérieur tsconfig.json
.IE 11
nécessite 'es5'.