web-dev-qa-db-fra.com

moment.js moment n'est pas défini

Je viens de mettre à jour les formulaires [email protected] à [email protected] dans mon application Ember.js et maintenant je reçois une erreur. Le moment n'est pas défini lorsque j'introduis moment () dans la console ou l'inclus dans mes scripts.

Sur la documentation, j'ai vu que "depuis la version 2.4.0, l'objet moment exporté globalement est obsolète". Je pense que c'est là le problème, mais je ne sais pas comment je peux placer un moment global dans ember, de sorte que toutes les références à moment () dans notre base de code ne soient pas cassées.

J'ai essayé de mettre à jour la ligne où nous faisions require ("moment") pour var moment = require ("moment") mais le résultat est identique. Même si je mets un débogueur directement après la var moment = ... line, puis que j'entre moment () dans la console, j'obtiens toujours que ce moment n'est pas défini.

16
Efarley

Vous voulez la section Browser de la nouvelle documentation.

Alors...

<script src="moment.js"></script>
<script>
    moment().format();
</script>

Modifier

Cela dit, il semble que cela vous donnera probablement le même problème.

Il semble que Moment.js essaie de vous encourager à utiliser un gestionnaire de paquets afin de ne pas corrompre l’espace de noms avec des variables globales.

Allez lire sur CommonJS et AMD , et essayez de l'intégrer à votre pile actuelle.

Vous devriez faire quelque chose comme:

var moment = require('moment');

moment().format();

Mais pour utiliser require, vous avez besoin d’un système de modules tel que ceux mentionnés ci-dessus.

Mais

La solution évidente consiste à restaurer votre version de Moment.js, tant que vous n'avez pas besoin de nouvelles fonctionnalités. Quelle importance peut avoir une mise à jour sur une simple bibliothèque heure/date?

13
shennan

Cela se produit, quand avant moment.js il y a déjà un gestionnaire de paquets/chargeur:

moment detects a package manager

Vous pouvez voir que le moment détecte 

  1. module.exports
  2. define.AMD

et s'il n'y a rien de tel, alors global.moment est attribué.

La variable global est en réalité window. La variable factory est la function ci-dessous représentant la fermeture de la portée du moment.


Deux possibilités:

a) assurez-vous qu'il n'y a AUCUN gestionnaire/chargeur de paquet CommonJS/SystemJS ... avant <script src="/scripts/moment-with-locales.js">

b) suivez la réponse de @ shennan et chargez l’instant par un gestionnaire de paquet/chargeur, par ex. en utilisant SystemJS:

SystemJS.import('/scripts/moment-with-locales.js').then(function(moment) {
    moment.locale('fr');
});
0
Motlicek Petr