web-dev-qa-db-fra.com

Angular2 + Jspm.io: une cale reflect-metadata est requise pour les décorateurs de classe

J'ai le problème suivant avec les versions ci-dessous de JSPM avec Angular2 et SystemJS (Versions: [email protected] avec [email protected] et [email protected]) Une fois que TypeScript est compilé (sans erreur) j’obtiens l’erreur suivante dans le navigateur:

/jspm_packages/npm/[email protected]/src/util/decorators.js:70 Uncaught reflect-metadata shim is required when using class decorators

Maintenant, lorsque j'inclus manuellement le fichier Reflect.js:\jspm_packages\npm\[email protected]\Reflect.js, le problème disparaît mais le problème suivant apparaît, disant que la liste n'est pas définie dans un autre fichier angular.

Voir la section src de bitbucket ci-dessous pour les fichiers de configuration (code src) provenant de system.js et de TypeScript/jspm.io

https://bitbucket.org/schippie/angular-2-jspm-hello-world/src/8af83f2066e5e9e9eee7db495545234f3b0c04a

Ce que je me demande, c'est s'il est actuellement possible d'utiliser jspm avec system.js pour récupérer tous les packages angular nécessaires au bon fonctionnement de angular. La configuration de system.js indique clairement que angular en dépend:

"npm:[email protected]": {
  "fs": "github:jspm/[email protected]",
  "path": "github:jspm/[email protected]",
  "process": "github:jspm/[email protected]",
  "reflect-metadata": "npm:[email protected]",
  "rx": "npm:[email protected]",
  "url": "github:jspm/[email protected]",
  "zone.js": "npm:[email protected]"
},

Mais ils ne sont pas récupérés (en regardant l'onglet réseau)

53
N.Schipper

Robwormald a écrit une explication bien détaillée qui couvre les problèmes que les gens pourraient avoir à ce stade et tentent d'obtenir angular alpha 27 pour fonctionner avec jspm et TypeScript https://Gist.github.com/robwormald/429e01c6d802767441ec

13
N.Schipper

Oui, ce que vous cherchez est possible et fonctionne bien. Il semble que les dépendances soient correctes. Je pense qu'il ne vous manque que les éléments suivants, qui doivent figurer au début de votre fichier TypeScript ou JavaScript de niveau supérieur. Plus précisément, ceux-ci doivent précéder la première ligne des charges angulaires.

import 'zone.js';
import 'reflect-metadata';

(L'autre réponse renvoie à une explication détaillée mais hors site.)

66
Kyle Cordes

Si ce problème se produit dans un environnement Angular 4.4+ +), il peut être utile de redémarrer ng serve.

4
creep3007