2015-06-03 55 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); 

有点哈克但作品。