Импорт момента-темзона и момента-диапазона с помощью webpack (Babel/ES6)
Я использую Webpack с загрузчиком Babel. Написание стандартов ES6. Я установил и момент-время и диапазон моментов с npm.
Оба эти являются плагинами moment.js, и оба они зависят от пакета момента и экспортируют отдельную библиотеку момента. Поэтому, когда я делаю
import moment from 'moment-timezone';
import moment2 from 'moment-range';
тогда я получаю две отдельные ссылки на момент.
Как я могу настроить его, чтобы использовать момент с функциями часового пояса и диапазона?
Спасибо!
Ответы
Ответ 1
Документы показывают синтаксис 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';
Ответ 2
У меня была эта проблема с разными пакетами: moment-timezone
и frozen-moment
. Корень всего зла имеет две зависимости moment
в разных частях дерева. В моем случае у меня было moment
прямо под node_modules
, а также внутри frozen-moment
node-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'
Имейте в виду, что только для правильной настройки теста вы должны использовать его, как в главном ответе:
import moment from 'moment';
import 'moment-timezone';
import 'moment-range';
Ответ 3
Все вышеупомянутые решения не сработали для меня, и мне пришлось прибегнуть к этому:
import moment from 'moment';
window.moment = moment;
import {extendMoment} from 'moment-range';
extendMoment(window.moment);
Немного взломан, но работает.
Ответ 4
Я нахожу стандартную реализацию моментального диапазона довольно уродливым, так как он просто расширяет моментный объект, а IMO - своего рода "хакерским".
Так я это делаю:
import { default as DateRange } from 'moment-range';
const myRange = new DateRange(x, y);