2016-02-08 15 views
23

sto usando JSPM, AngularJS, TypeScript, SystemJS e ES6 e il mio progetto sta funzionando abbastanza bene ... a meno che non si tenta di utilizzare momentJS.SystemJS - momento non è una funzione

Questo è l'errore che ottengo:

TypeError: moment is not a function

Questo fa parte del codice:

import * as moment from 'moment'; 

Più:

var momentInstance = moment(value); 

Se il debug di esso, momento è un oggetto non una funzione:

enter image description here

Questo è ciò che il mio pacchetto moment.js JSPM assomiglia:

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

Ho letto molto e non sono riuscito a trovare un modo per risolvere questo ... tutte le idee?

Alcune cose che ho letto/provato:

How to use momentjs in TypeScript with SystemJS?

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

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

Typescript module systems on momentJS behaving strangely

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

Grazie!

+0

chi hai fatto la tua dipendenza di iniezione del momento in angolare? – AlainIb

+0

@AlainIb ciao, grazie per il tuo commento. Mi dispiace, ma intendi perché? Se sì, cosa consiglieresti come alternativa? Grazie ancora. – eestein

risposta

43

sufficiente rimuovere il raggruppamento (* as) dalla sua dichiarazione di importazione:

import moment from 'moment'; 

senza scavare troppo in profondità dentro al source code, sembra che moment solito esporta una funzione, che ha tutti i tipi di metodi e le altre proprietà collegato ad esso.

Utilizzando * as, si sta effettivamente afferrare tutte quelle proprietà e le collega ad un nuovo oggetto, distruggendo la funzione originale. Invece, si desidera solo l'esportazione principale (export default in ES6, module.exports oggetto in Node.js).

In alternativa, si potrebbe fare

import moment, * as moments from 'moment'; 

per ottenere la funzione di momento comemoment, e tutti gli altri immobili in un oggetto chiamato moments. Questo ha un po 'meno senso quando si convertono le esportazioni ES5 come questo in stile ES6, perché moment manterrà le stesse proprietà.

+1

Grazie mille! ... Non posso credere che fosse solo quello, e che non l'ho provato prima ... Grazie! – eestein

+0

@ Cheeste Cheers. Ecco l'articolo MDN su ['import'] (https://developer.mozilla.org/en/docs/web/javascript/reference/statements/import). A mio parere, è un po 'troppo breve in questo momento, ma copre la maggior parte della sintassi. – Oka

+0

grazie sei stato di grande aiuto :) ora sto provando a risolvere alcuni problemi relativi alla funzione tz non essendo disponibile ... Grazie ancora !! – eestein

Problemi correlati