J'utilise Webpack avec le chargeur Babel. Rédaction selon les normes ES6. J'ai installé moment-timezone et moment-range avec npm.
Les deux sont des plugins moment.js, qui dépendent du package moment et exportent une bibliothèque séparée moment. Alors quand je fais
import moment from 'moment-timezone';
import moment2 from 'moment-range';
alors je reçois deux références séparées à moment.
Comment puis-je le configurer pour pouvoir utiliser moment avec les fonctions de fuseau horaire et de plage?
Merci!
Docs montre la syntaxe CommonJS pour ceci:
var moment = require('moment');
require('moment-range');
require('moment-timezone');
// moment() now has both range and timezone plugin features
En ES6:
import moment from 'moment';
import 'moment-range';
import 'moment-timezone';
MODIFIER
Puisque moment-timezone
n’étend pas l’importation existante, mais moment
lui-même, qu’en est-il?
import moment from 'moment-timezone';
import 'moment-range';
J'ai moi-même eu ce problème avec différents paquets: moment-timezone
et frozen-moment
. La racine de tout mal a deux dépendances moment
dans différentes parties de l’arbre. Dans mon cas, j'avais moment
droit sous node_modules
et aussi à l'intérieur de frozen-moment
's node-modules
. Cela signifiait que moment-timezone
et frozen-moment
utilisaient différentes instances moment
.
Vérifiez que vous utilisez des versions de packages compatibles les unes avec les autres afin que moment-range
n'ait pas besoin d'extraire une version différente de moment
. Lorsque vous l'avez correctement, vous devriez pouvoir faire ceci:
import moment from 'moment';
import momentTimezone from 'moment-timezone';
import momentRange from 'moment-range';
console.log(moment === momentTimezone === momentRange); // logs 'true'
N'oubliez pas que c'est uniquement pour tester sa configuration, vous devriez l'utiliser comme dans la réponse de glortho:
import moment from 'moment';
import 'moment-timezone';
import 'moment-range';
Toutes les solutions ci-dessus ne fonctionnaient pas pour moi et j'ai dû recourir à ceci:
import moment from 'moment';
window.moment = moment;
import {extendMoment} from 'moment-range';
extendMoment(window.moment);
Un petit hacky mais ça marche.
Je trouve l’implémentation par défaut de la plage de moments assez moche, puisqu’elle ne fait que prolonger l’objet de moment, et l’OMI est un peu "hacky".
Voici comment je le fais:
import { default as DateRange } from 'moment-range';
const myRange = new DateRange(x, y);
J'ai réussi à importer moment-timezone
et moment-range
avec ce code:
import Moment from 'moment-timezone';
import momentRange from 'moment-range';
const moment = momentRange.extendMoment(Moment);
Mon projet utilise webpack avec ES6 (identique à OP, je pense), avec React. J'ai besoin de fonctionnalités à partir du fuseau horaire. Après avoir ajouté les dépendances moment
et moment-timezone
npm, cette instruction d'importation fonctionne comme suit:
import moment from 'moment-timezone';
Cela me permet de faire des appels comme moment.tz.guess();
Ce qui m'a vraiment choqué, c'est que le fait d'ajouter que l'importation ne rend pas moment
disponible dans la console de développement de mon navigateur. En parcourant les commentaires dans https://github.com/moment/moment/issues/2608 , quelqu'un a mentionné cet extrait qui rend moment
disponible dans la console de développement:
window.moment = moment;