2015-06-03 18 views
12

Utilizzo Webpack con caricatore Babel. Scrivere secondo gli standard ES6. Ho installato sia il fuso orario che l'intervallo del momento con npm.Importazione di momento-timzone e intervallo di tempo con webpack (Babel/ES6)

Entrambi questi sono moment.js plugin, ed entrambi questi dipendono dal momento pacchetto ed esportare un separato momento biblioteca. Così, quando lo faccio

import moment from 'moment-timezone'; 
import moment2 from 'moment-range'; 

allora ottengo due riferimenti distinti a momento.

Come posso configurarlo in modo da poter utilizzare momento con le funzioni di fuso orario e intervallo?

Grazie!

risposta

21

Docs spettacolo CommonJS sintassi per questo:

var moment = require('moment'); 
require('moment-range'); 
require('moment-timezone'); 

// moment() now has both range and timezone plugin features 

In ES6:

import moment from 'moment'; 
import 'moment-range'; 
import 'moment-timezone'; 

EDIT

Dal moment-timezone non si estende importazione esistente, ma si fa estende moment stessa, per quanto riguarda Questo?

import moment from 'moment-timezone'; 
import 'moment-range'; 
+0

Non ho idea se la tua risposta risolve effettivamente il problema, ma in entrambi i casi è perfettamente scrivibile visto che anche ES6 importa. – loganfsmyth

+0

Grazie @loganfsmyth - risolto. – glortho

+0

Purtroppo, in questo caso non funziona. importare 'momento-fuso orario'; non modifica un "momento" precedentemente importato. Tuttavia importa 'intervallo di tempo'; lo fa. Quindi il problema sembra essere nel pacchetto "momento-fuso orario". Ti darò un upvote, ma non controllando "correct anwser" –

7

ho avuto io stesso questo problema con diversi pacchetti: moment-timezone e frozen-moment. La radice di tutto il male sta avendo due dipendenze moment in diverse parti dell'albero. Nel mio caso, ho avuto moment proprio sotto node_modules e anche all'interno di node-modules di frozen-moment. Ciò significava che moment-timezone e frozen-moment utilizzavano diverse istanze moment.

Verificare che si stiano utilizzando versioni di pacchetti compatibili tra loro in modo che moment-range non abbia bisogno di scaricare una versione diversa di moment. Quando si dispone correttamente si dovrebbe essere in grado di fare questo:

import moment from 'moment'; 
import momentTimezone from 'moment-timezone'; 
import momentRange from 'moment-range'; 

console.log(moment === momentTimezone === momentRange); // logs 'true' 

Tenete a mente che è solo per il test è correttamente l'impostazione, si dovrebbe utilizzarlo come in risposta di glOrtho:

import moment from 'moment'; 
import 'moment-timezone'; 
import 'moment-range'; 
+0

Non è stato possibile importare [email protected] con [email protected] Tuttavia, cambiando il momento in 2.18.1 l'ho risolto per me. Ho usato la sintassi raccomandata: momento di importazione da "momento"; importazione 'momento-fuso orario'; importazione 'intervallo di tempo'; –

1

trovo il l'implementazione di default del moment-range è piuttosto brutta, dal momento che estende l'oggetto del momento e IMO che è un po '"hacky".

Questo è il modo in cui lo sto facendo:

import { default as DateRange } from 'moment-range'; 

const myRange = new DateRange(x, y); 
3

Tutte le soluzioni di cui sopra non ha funzionato per me e ho dovuto ricorrere a questo:

import moment from 'moment'; 
window.moment = moment; 
import {extendMoment} from 'moment-range'; 
extendMoment(window.moment); 

Un po 'hacky ma opere .

Problemi correlati