2015-06-03 13 views
12

Używam Webpacka z programem Babel. Pisanie według standardów ES6. Zainstalowałem zarówno moment-strefę czasową, jak i zakres momentu z npm.Importowanie chwili-strefy czasowej i zakresu momentu z pakietem internetowym (Babel/ES6)

Oba są moment.js wtyczek, a oba te zależą chwila pakietu i eksportować oddzielnym chwili bibliotekę. Więc kiedy zrobić

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

potem dostać dwa oddzielne odniesień do chwili.

Jak mogę to skonfigurować, aby móc korzystać z funkcji z momentem z funkcjami strefy czasowej i zakresu?

Dzięki!

Odpowiedz

21

Docs pokaż CommonJS składnia to:

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

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

W ES6:

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

EDIT

Od moment-timezone nie rozszerza istniejący import ale wykracza moment samo, co to?

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

Nie mam pojęcia, czy twoja odpowiedź rzeczywiście rozwiązuje problem, ale tak czy inaczej jest również zapisywalna, podobnie jak w przypadku importu ES6. – loganfsmyth

+0

Dzięki @loganfsmyth - poprawiono. – glortho

+0

Niestety, to nie działa w tym przypadku. import "moment-strefa czasowa"; nie modyfikuje wcześniej zaimportowanego "momentu". Jednak importuj "zakres momentu"; robi. Tak więc wydaje się, że problem dotyczy pakietu "moment-strefa czasowa". Dam ci uprowadzenie, ale nie sprawdzam "poprawnego anwsera". –

7

miałem sobie ten problem z różnych pakietów: moment-timezone i frozen-moment. Źródłem wszelkiego zła jest posiadanie dwóch zależności od siebie w różnych częściach drzewa. W moim przypadku miałem moment prawo pod node_modules, a także wewnątrz frozen-moment 's node-modules. Oznaczało to, że moment-timezone i frozen-moment używały różnych instancji moment.

Sprawdź, czy używasz wersji pakietów, które są ze sobą zgodne, aby moment-range nie musiał pobierać innej wersji moment. Gdy masz go poprawnie powinieneś być w stanie to zrobić:

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

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

Należy pamiętać, że tylko do testowania to poprawnie skonfigurować, należy używać go jak w glortho za odpowiedź:

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

Nie mogę zaimportować [email protected] z momentem2.20.1. Jednak zmiana momentu na 2.18.1 naprawiła go dla mnie. Użyłem zalecanej składni: importuj moment z "momentu"; import "moment-strefa czasowa"; import "moment-zakres"; –

1

znajdę domyślna implementacja zakresu momentu jest dość brzydka, ponieważ po prostu rozszerza obiekt momentu, a IMO jest trochę "hacky".

ten sposób robię go:

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

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

Wszystkie powyższe rozwiązania nie działa dla mnie i musiałem uciekać się do tego:

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

Trochę hacky ale działa .

Powiązane problemy