2015-06-03 105 views
12

我使用Webpack和Babel加載器。按ES6標準編寫。我已經用npm安裝了時區和時區。用webpack(Babel/ES6)導入時刻 - timzone和時刻範圍

這些兩者都是moment.js插件,這兩個依賴於時刻包,並導出一個獨立的時刻庫。所以,當我做

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

然後我得到兩個不同的引用時刻

如何設置它,以便我可以使用時刻帶時區和範圍功能?

謝謝!

回答

21

Docs顯示CommonJS的這句法:

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

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

在ES6:

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

編輯

由於moment-timezone不擴大現有的進口,但不會延長moment本身,怎麼樣這個?

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

我不知道你的答案是否確實解決了這個問題,但是無論哪種方式,ES6的輸入都是完全可寫的。 – loganfsmyth

+0

謝謝@loganfsmyth - 修正。 – glortho

+0

不幸的是,在這種情況下它不起作用。導入'時刻';不會修改以前導入的「時刻」。然而導入'時刻範圍';確實。所以這個問題似乎與「時區 - 時區」套件有關。我會給你一個upvote,但不檢查「正確的anwser」 –

7

我有我自己這個問題,不同的封裝:moment-timezonefrozen-moment。所有邪惡的根源在樹的不同部分有兩個moment依賴關係。在我的情況下,我有momentnode_modules之下,也在frozen-momentnode-modules之內。這意味着moment-timezonefrozen-moment正在使用不同的moment實例。

檢查您使用的軟件包版本是否相互兼容,以便moment-range不需要獲取不同版本的moment。當你正確地擁有它,你應該能夠做到這一點:

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

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

請記住,這只是測試它的正確設置,應在glortho的回答這樣使用它:

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

我無法導入[email protected]和[email protected]。然而,改變時刻到2.18.1爲我修好了。我使用了推薦的語法:從'時刻'導入時刻; import'moment-timezone'; import'moment-range'; –

1

我找到默認實現的時間範圍很不好看,因爲它只是延長了時刻對象,而IMO則有點「哈克」。

這是我做的方式:

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

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

上述所有的解決方案並沒有爲我工作,我不得不求助於此:

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

有點哈克但作品。