32
votes

TypeError: le prototype d'objet ne peut être qu'un objet ou nul: Angular 8 indéfini

Chaque fois que j'essaye de démarrer mon application Web, j'obtiens cette erreur de type. Je ne comprends pas pourquoi.

J'ai commencé à l'obtenir après avoir mis à jour certains packages. Je ne peux pas comprendre lequel était le problème ou pourquoi le code que l'erreur pointe pour donner est erroné car c'est du code dans mes dépendances pour Angular 8. Je ne suis pas vraiment sûr de ce que l'erreur me dit. J'ai essayé de mettre à jour toutes les dépendances. J'ai examiné presque toutes les solutions de questions similaires et elles n'ont pas fonctionné. Je ne peux pas dire s'il s'agit d'une erreur de compilateur, d'un manuscrit ou d'une erreur de dépendance.

ERREUR

{
  "name": "nh",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "heroku-postbuild": "ng build --prod"
  },
  "keywords": [
    "heroku"
  ],
  "private": true,
  "dependencies": {
    "@agm/core": "^1.0.0-beta.6",
    "@angular-devkit/build-angular": "^0.13.0",
    "@angular/animations": "~8.1.2",
    "@angular/common": "~8.1.2",
    "@angular/core": "~8.1.2",
    "@angular/forms": "~8.1.2",
    "@angular/platform-browser": "~8.1.2",
    "@angular/platform-browser-dynamic": "~8.1.2",
    "@angular/router": "~8.1.2",
    "@types/googlemaps": "^3.37.0",
    "core-js": "^2.5.4",
    "font-awesome": "^4.7.0",
    "hammerjs": "^2.0.8",
    "ngx-gallery": "^5.10.0",
    "rxjs": "~6.5.2",
    "tslib": "^1.9.0",
    "zone.js": "^0.9.1"
  },
  "devDependencies": {
    "@angular/cli": "^7.3.9",
    "@angular/compiler": "^7.2.15",
    "@angular/compiler-cli": "^8.1.2",
    "@angular/language-service": "~8.1.2",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.5.0",
    "enhanced-resolve": "^3.3.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "^3.4.5"
  },
  "engines": {
    "node": "10.16.0",
    "npm": "6.9.0"
  }
}

PACKAGE.JSON

[error] TypeError: Object prototype may only be an Object or null: undefined
    at setPrototypeOf (<anonymous>)
    at Object.__extends (C:\Users\leahb\Desktop\NH\NH-Senior-Project\node_modules\tslib\tslib.js:65:9)
    at C:\Users\leahb\Desktop\NH\NH-Senior-Project\node_modules\@angular\compiler-cli\src\ngtsc\indexer\src\template.js:115:17

tslib.js at line 65
    (function (exporter) {
        var extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };

        __extends = function (d, b) { 
            extendStatics(d, b); *//saying the error is coming from here*
            function __() { this.constructor = d; }
            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };

Je m'attendais à ce que l'application compile, crée et démarre. Chaque fois que j'essaye ng serve, ng test ou ng build, j'obtiens cette erreur.


2 commentaires

Toutes vos libs angulaires devraient généralement s'aligner. Essayez de mettre @angular/cli jour @angular/cli et @angular/compiler vers la version 8. De plus, chaque fois que vous mettez à niveau la version principale d'Angular, il y a généralement du travail à faire. Ce site vous donnera les étapes. Si vous passez de 7 à 8, c'est update.angular.io/#7.0:8.0


S'il vous plaît, regardez ici stackoverflow.com/questions/57306898/...


8 Réponses :


22
votes

J'ai eu le même problème avec mon projet angular@7 après la mise à jour globale de la CLI vers la version 8 et le résoudre en mettant à niveau angular dans mon projet vers la dernière version en exécutant cette commande dans mon répertoire de projet:

ng update @angular/cli @angular/core --allow-dirty

Vous pouvez également utiliser l'indicateur allow-dirty pour contourner la vérification du dépôt:

ng update @angular/cli @angular/core

En outre, il y a d'autres choses à surveiller lors de la mise à niveau qui ont été mentionnées ici: https://update.angular.io/#7.0:8.0


0 commentaires

8
votes

L'utilisation de l'indicateur allow-dirty vous permet de contourner la vérification du repo.

ng update @angular/cli @angular/core --allow-dirty


1 commentaires

oui cela a fonctionné mais pourquoi voulez-vous contourner.? Pourquoi ne nettoyons-nous pas le référentiel au lieu de le contourner?



1
votes

Pour les utilisateurs Ionic: Dans mon cas, le problème était l'incompatibilité entre la version actuelle angular / ionic cli et la version angular / ionic app.

Les étapes à résoudre:

1) Créez un nouveau projet avec la version ionique 3, puis comparez les fichiers packages.json.

ionic cordova build android --prod

2) Dans le dossier Ionic3Project, créez Android

ionic cordova platform add android

3) Ouvrez le package.json de votre projet principal et modifiez les versions suivantes des dépendances:

"@angular/*"
"@ionic-native/*"
"rxjs"
Also, replace the "scripts" part.

4) Supprimez votre dossier node_modules.

5) Supprimez votre dossier de plate-forme Android (le dossier de plate-forme entier ou juste le dossier Android).

6) Exécutez l' npm install

7) Ajouter la plate-forme Android

ionic cordova build android --prod

8) Créez à nouveau votre application

ionic start Ionic3Project blank --type=ionic-angular

Après avoir suivi ces étapes, je pourrais à nouveau créer mon application.

Obs .: Il est possible que vous ayez des problèmes liés aux plugins entre ces étapes. Dans ce cas, vous devrez peut-être réinstaller le (s) plugin (s). Faites-le et gardez ces étapes à l'esprit. Essayez de supprimer et de rajouter Android après avoir réinstallé les plugins.


0 commentaires

9
votes

J'ai eu la même erreur dans mon application Angular lors de l'exécution de tests avec ng test .

Dans mon cas, la cause du problème était les dépendances circulaires .

J'avais deux classes qui faisaient partie de certains index.ts , mais l'une d'elles importait l'autre en utilisant le même index. Cela provoquait une dépendance circulaire car, par conséquent, index.ts était importé plusieurs fois.

Une fois supprimée la dépendance circulaire, tout fonctionnait bien.

J'ai été inspiré par: https://stackoverflow.com/a/53123468/3497671


1 commentaires

juste pour ajouter que cette réponse s'applique également à React, j'avais une importation circulaire qui empêchait un test de s'exécuter



0
votes

Dans mon application Ionic, j'ai rétrogradé la CLI angulaire de 8.xx à 5.2.11 en utilisant npm i @angular/compiler-cli@5.2.11 et cela a fonctionné


0 commentaires

0
votes

J'ai eu le problème et j'ai lu la réponse de Francesco Borzi et j'ai découvert que l'ordre des importations peut avoir de l'importance:

J'utilise un index.ts dans l'index.ts J'importe n'importe quelle classe locale './*' puis les exporte aussitôt l'ordre des importations était

import Class1 from '.'

export Class2 extends Class1

et en Class2 j'aurais un

import { Class2 } from './class2';
import { Class1 } from './class1';

Il essayait de compiler d'abord Class2 et Class2 se réfère à Class1. J'ai inversé les importations dans index.ts et cela fonctionne maintenant


0 commentaires

0
votes

Cela m'est arrivé sur Angular 9, je vais donc laisser cette réponse ici pour les personnes à la recherche d'un correctif sur cette version ... Je l'ai corrigé en supprimant le dossier node_modules et en le réinstallant. Cela garantissait que ngcc était forcé de recompiler les dépendances. Assurez-vous postinstall que votre postinstall - postinstall , NPM ressemble à ceci:

"postinstall": "ngcc"


0 commentaires

0
votes

J'ai eu le même problème résolu de cette façon:

npm i @angular/compiler-cli@~8.0.0


0 commentaires