使用webpack导入moment-timzone和moment-range(Babel/ES6)

Ola*_*kin 18 javascript momentjs ecmascript-6 webpack

我正在使用带有Babel加载器的Webpack.按ES6标准编写.我已经用npm安装了时刻 - 时区和时刻 - 范围.

这两个都是moment.js插件,这两个都取决于当前的包,并导出一个单独的时刻库.所以,当我这样做

import moment from 'moment-timezone';
import moment2 from 'moment-range';
Run Code Online (Sandbox Code Playgroud)

然后我得到两个单独的参考时刻.

我该如何设定,让我可以使用瞬间与时区和范围的功能呢?

谢谢!

glo*_*tho 32

文档为此显示了CommonJS语法:

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

// moment() now has both range and timezone plugin features
Run Code Online (Sandbox Code Playgroud)

在ES6中:

import moment from 'moment';
import 'moment-range';
import 'moment-timezone';
Run Code Online (Sandbox Code Playgroud)

编辑

既然moment-timezone不扩展现有的进口,但确实扩展了moment自己,那么呢?

import moment from 'moment-timezone';
import 'moment-range';
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,它在这种情况下不起作用。导入“时刻时区”;不修改先前导入的“时刻”。但是导入“时刻范围”;做。所以问题似乎出在“moment-timezone”包上。我会给你投票,但不检查“正确的答案” (2认同)

man*_*its 9

我用不同的包装解决了这个问题:moment-timezonefrozen-moment.所有邪恶的根源是moment在树的不同部分有两个依赖.就我而言,我有moment右下node_modules也里面frozen-momentnode-modules.这意味着moment-timezone并且frozen-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'
Run Code Online (Sandbox Code Playgroud)

请记住,仅用于测试它的正确设置,您应该像在glortho的答案中那样使用它:

import moment from 'moment';
import 'moment-timezone';
import 'moment-range';
Run Code Online (Sandbox Code Playgroud)