web-dev-qa-db-fra.com

SystemJS - le moment n'est pas une fonction

J'utilise JSPM, AngularJS, TypeScript, SystemJS et ES6 et mon projet fonctionne plutôt bien ... sauf si j'essaie d'utiliser momentJS.

C'est l'erreur que j'obtiens:

TypeError: le moment n'est pas une fonction

Cela fait partie du code:

import * as moment from 'moment';

Plus:

var momentInstance = moment(value);

Si je le débogue, moment est un objet et non une fonction:

 enter image description here

Voici à quoi ressemble mon paquet JSPM moment.js:

module.exports = require("npm:[email protected]/moment.js");

J'ai beaucoup lu et je n'ai pas trouvé le moyen de résoudre ce problème ... des idées? 

Certaines choses que j'ai lues/essayées:

Comment utiliser momentjs dans TypeScript avec SystemJS?

https://github.com/angular-ui/ui-calendar/issues/154

https://github.com/jkuri/ng2-datepicker/issues/5

Les systèmes de modules TypeScript sur momentJS se comportant étrangement

https://github.com/dbushell/Pikaday/issues/153

Merci!

25
eestein

Supprimez simplement le groupement (* as) de votre déclaration d'importation:

import moment from 'moment';

Sans entrer trop profondément dans le code source , il semble que moment exporte généralement une fonction, qui comporte toutes sortes de méthodes et d’autres propriétés.

En utilisant * as, vous récupérez effectivement toutes ces propriétés et les attachez à un objet new, détruisant ainsi la fonction d'origine. Au lieu de cela, vous ne voulez que l’export en chef (export default dans ES6, objet module.exports dans Node.js).

Alternativement, vous pourriez faire

import moment, * as moments from 'moment';

pour obtenir la fonction moment asmoment et toutes les autres propriétés d'un objet appelé moments. Cela semble un peu moins logique lors de la conversion d'exportations ES5 comme celle-ci en style ES6, car moment conservera les mêmes propriétés.

52
Oka

Une erreur JS débutante qui me donnait la même erreur:

foobar(moment) {
  console.log(moment().whatever());
}

Nommer un paramètre moment interrompt l'accès à la fonction moment().

0
Patrick

Cela a fonctionné pour moi:

import moment from 'moment/src/moment'
0
S. Bleier