Javascript 使用网页包导入力矩时区和力矩范围(Babel/ES6)

Javascript 使用网页包导入力矩时区和力矩范围(Babel/ES6),javascript,momentjs,ecmascript-6,webpack,Javascript,Momentjs,Ecmascript 6,Webpack,我正在使用Babel loader的网页包。按照ES6标准写作。我用npm安装了时刻时区和时刻范围 这两个都是moment.js插件,它们都依赖于moment包,并导出一个单独的moment库。所以当我这么做的时候 import moment from 'moment-timezone'; import moment2 from 'moment-range'; 然后我得到了对时刻的两个独立引用 如何设置它,以便将矩与时区和范围功能结合使用 谢谢 为此显示CommonJS语法: var mome

我正在使用Babel loader的网页包。按照ES6标准写作。我用npm安装了时刻时区和时刻范围

这两个都是moment.js插件,它们都依赖于moment包,并导出一个单独的moment库。所以当我这么做的时候

import moment from 'moment-timezone';
import moment2 from 'moment-range';
然后我得到了对时刻的两个独立引用

如何设置它,以便将与时区和范围功能结合使用

谢谢

为此显示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';
编辑

既然
时刻时区
不扩展现有的导入,而是扩展
时刻
本身,那么这个呢

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

我在不同的软件包中遇到了这个问题:
时刻时区
冻结时刻
。万恶之源在于树的不同部分有两个
时刻
依赖关系。在我的例子中,我有
时刻
就在
节点模块
下面,还有
冻结时刻
节点模块的内部。这意味着
时刻时区
冻结时刻
使用不同的
时刻
实例

检查您使用的软件包版本是否相互兼容,以便
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';

我发现矩范围的默认实现非常难看,因为它只是扩展了矩对象,在我看来这有点“黑客”

我就是这样做的:

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

const myRange = new DateRange(x, y);

上述所有解决方案对我都不起作用,我不得不求助于此:

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

有点老套,但很管用。

我用以下代码导入了
时刻时区
时刻范围

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

const moment = momentRange.extendMoment(Moment);

我的项目使用带有ES6的webpack(我认为与OP相同),带有React。我需要时刻时区的功能。在添加
时刻
时刻时区
npm依赖项后,此导入语句将起作用:

import moment from 'moment-timezone';
这样我就可以调用
moment.tz.guess()

但真正让我感到不快的是,仅仅添加导入并不能使
时刻
在我的浏览器的开发控制台中可用。浏览中的注释时,有人提到了这段代码,它使开发者控制台中的
moment
可用:

window.moment = moment;
这对我有用

import*作为“时刻时区”中的时刻
从“力矩范围”导入*作为力矩范围

我不知道您的答案是否真的解决了问题,但无论哪种方式,它都是完全可写的,因为ES6也导入了。谢谢@loganfsmyth-fixed。遗憾的是,它在这种情况下不起作用。输入“时刻时区”;不修改以前导入的“时刻”。然而,输入“力矩范围”;做所以问题似乎出在“时刻时区”套餐上。我会给你一票,但不检查“正确的anwser”不,对不起。我尝试了所有的组合。它必须按照您最初建议的方式完成(感谢您,我不知道导入的语法),但它不起作用。不知何故,“力矩范围”仅在我仅导入“力矩”时扩展力矩。但这很奇怪。它们都依赖于相同版本的“矩”,我甚至在package.json中定义了“peerDependencies”:{“矩”:“2.10.3”}。所以我知道,对于“时区”和“范围”,我得到的是相同的“时刻”库,我无法导入时刻-timezone@0.5.14具有moment@2.20.1. 然而,将“时刻”更改为2.18.1为我解决了这个问题。我使用了推荐的语法:从“矩”导入矩;输入“时刻时区”;输入“力矩范围”;