Moment: La taille du package NPM de moment.js est gênante

Créé le 17 août 2016  ·  26Commentaires  ·  Source: moment/moment

J'ai vérifié la taille du fichier de mon dossier ./node_modules et il semble que moment.js soit la bibliothèque non-C la plus lourde. 2,1 Mo, c'est beaucoup. Un rapide coup d'œil à la taille du dossier montre :

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

La majeure partie du poids provient de la publication de versions compressées de moment.js avec npm ainsi que de la double publication de tous les paramètres régionaux. Mais les lieux seuls sont assez lourds en eux-mêmes.

En tant que tel, j'ai pensé qu'il serait peut-être bon pour moment.js et la communauté de réduire ce montant ?!

  • [ ] Serait-il possible d'omettre le dossier ./src d'être publié dans npm ?
  • [ ] Serait-il possible d'omettre le dossier ./min d'être publié dans npm ?
  • [ ] Serait-il possible de déplacer le dossier ./locales dans un package npm séparé pour réduire le moment au minimum ?
BuilRelease

Commentaire le plus utile

le consensus général est que l'espace disque dans une application de nœud n'est pas une prime de la même manière qu'il l'est dans le navigateur

Je ne pense pas qu'on puisse construire une bonne librairie avec ce genre d'état d'esprit.

screen shot 2018-08-01 at 11 16 23 am

Au moment où les gens réalisent que la taille du paquet est un vrai problème, et que vous avez choisi de ne rien faire, moment est mort.
Pour tous ceux qui recherchent des alternatives légères, date-fns serait un excellent choix.

Tous les 26 commentaires

Les gens utilisent le moment de différentes manières, et le consensus général est que l'espace disque dans une application de nœud n'est pas une prime de la même manière que dans le navigateur.

Cela dit, je ne sais pas exactement ce qui se passe dans le dossier min :

image

Je ne sais pas du tout pourquoi nous avons besoin de moment-with-locales.min.js dans npm. Il devrait être suffisant d'avoir moment.min.js et locales.min.js , n'est-ce pas ?

De plus, il ne devrait pas y avoir besoin de fichiers non minimisés dans un dossier min ( locale.js et moment-with-locales.js ).

Le dossier min est vraiment mal nommé. Construit pourrait être un meilleur nom. Mais c'est là que vivent les fichiers moment-with-locales et locales jusqu'à ce que nous exécutions la tâche de mise à jour de l'index pour la publication.

Nous pourrions certainement retirer spécifiquement les fichiers moment-with-locales de npm, mais je ne suis pas sûr de la valeur qu'il fournit.

@martinheidegger pouvez-vous s'il vous plaît expliquer dans quelles conditions la taille de l'ensemble du package pose un problème. Le paquet grandit à mesure que les gens veulent plus d'options pour consommer la bibliothèque. Si nous devons supprimer les éléments que vous répertoriez, nous devons publier des packages séparés qui sont minimes à certains égards, puis publier également un package volumineux contenant tout.

Pouvez-vous donner un exemple avec une autre bibliothèque qui réduit tout au strict minimum dans certaines/toutes ses versions npm ?

L'installation npm de lodash est de 1,4 Mo alors que minified c'est seulement _69 Ko_
Le fait que lodash publie également chaque fonction en tant que package propre ne conduit qu'à une longue liste de packages qui sont réinstallés, car ils sont référencés dans un autre package.
Lorsque je regarde mon dossier node_modules typique d'une taille d'environ 300 Mo, je ne sais pas si cela vaut la peine de réduire un peu moment.js.

Et il y en a beaucoup plus, voire beaucoup plus gros, en voici quelques-uns

  • rx: 6,6 Mo
  • rxjs: 3,3 Mo
  • @angulaire : 10,8 Mo
  • Intl : 79,1 Mo
  • grognement: 6,2 Mo

Bien que je ne me soucie pas vraiment de la taille du package npm, je trouve étonnant que je doive inclure 58 Ko pour des dates manipulées de manière sensée (en supposant que je n'ai pas besoin de paramètres régionaux, qui sont beaucoup plus lourds) 😞

J'en ai marre de discuter ce genre de chose. Je pensais qu'un encombrement réduit rendrait l'installation de mon package plus rapide (dont le moment est le plus important). Je suppose que je cours contre des moulins à vent. Alors : kthxbye.

@martinheidegger essaie fil, au moins ils sont plus sains d'esprit que npm et mettent en cache le paquet, donc vous ne devriez pas passer autant de temps sur les téléchargements :)

Je suis confronté au même problème. Faire import moment from 'moment'; augmente la taille du bundle de 30 Ko à 250 Ko !!! Y a-t-il une solution facile les gars ??

@ paramsingh88 On dirait que la seule option est de ne pas l'utiliser. J'ai trouvé ce fil à cause du même problème. La taille de mon projet augmente de 58 Ko en faisant simplement moment.unix(created).format('MMMM D, YYYY') . Absolument fou !

Je ne comprends pas cette attitude :

l'espace disque dans une application de nœud n'est pas une prime de la même manière que dans le navigateur.

Le problème est que Moment n'est pas une application de nœud - c'est une bibliothèque qui peut être utilisée soit dans une application principale, soit dans la bibliothèque frontale. Dans ce cas, oui, j'ai besoin d'utiliser Moment.js pour valider les dates sur le front-end de l'application avant de les envoyer au backend (qui a sa propre validation séparée.)

La taille du moment sans locales est de 50k (minifiée), la taille avec les locales est d'environ 300k (minifiée). Si vous voulez faire quelque chose à ce sujet, consultez la discussion ici https://github.com/moment/moment/issues/2373

Et si vous utilisez un gestionnaire de paquets ou quoi que ce soit qui vous complique la vie, apportez-les également.

Désolé mon mauvais. (édité)

le consensus général est que l'espace disque dans une application de nœud n'est pas une prime de la même manière qu'il l'est dans le navigateur

Je ne pense pas qu'on puisse construire une bonne librairie avec ce genre d'état d'esprit.

screen shot 2018-08-01 at 11 16 23 am

Au moment où les gens réalisent que la taille du paquet est un vrai problème, et que vous avez choisi de ne rien faire, moment est mort.
Pour tous ceux qui recherchent des alternatives légères, date-fns serait un excellent choix.

Salut, le moment npm est d'environ 3 Mo, mais cela a un impact sur la taille de l'outil en ligne d'édition lambda. rétrécir aiderait certainement

L'utiliser dans une application Angular gzipped finit par représenter 70% de la taille de mes petits paquets. Ce serait génial si nous pouvions exclure les fonctionnalités dont nous n'avons pas besoin car pour le moment, je dois import * as moment from 'moment' l'ensemble du package.

moment.js double essentiellement la taille d'une grande partie de mon application Angular :

image

Cela fait vraiment mal sur les appareils mobiles.

@silentsnooc Au moment de l'exécution, vous êtes censé charger uniquement les paramètres régionaux dont vous avez besoin. Ainsi, la principale préoccupation pour vous est de charger paresseux les fichiers de paramètres régionaux uniquement lorsque vous les utilisez.

@kylekatarnls Si vous pouviez montrer un exemple à ceux d'entre nous qui utilisent des bundlers, ce serait utile. Merci.

L'exemple pour JSPM donné dans la doc ici :
https://momentjs.com/docs/#/i18n/loading-into-browser/

fonctionne également pour webpack, et je suppose que cela peut faire le travail pour d'autres bundlers.

Pas essayé, mais ce commentaire a beaucoup de likes :
https://github.com/moment/moment/issues/2517#issuecomment-185836313

Je crois que moments.js n'était pas destiné à être utilisé dans le front-end du navigateur et les responsables n'avaient pas l'intention de le faire. Lorsque nous avons été confrontés au problème similaire, nous avons fini par utiliser date-fns sur le front-end et garder moments.js sur le backend. Pour un nouveau projet, je verrais si date-fns peut être utilisé aux deux extrémités.

@demisx je n'ai pas besoin d'en voir plus :

image

Merci pour l'astuce. :+1: Merci également à

trouver une bibliothèque de plus petite taille, qui est une alternative à moment.js

https://github.com/iamkun/dayjs

Je viens de remplacer momentjs par dayjs. Semble bien fonctionner pour mes besoins et ce n'est que d'environ 15 Ko avec l'ensemble de plugins locale et fromNow. Fantastique.

Différences de taille du bundle d'applications Ionic 4 / Angular 8 :

avec momentJS : il ajoute = 204 KB

avec dayJS : ça ajoute = 6 KB

J'ai juste besoin d'un formatage et de manipulations de données/heure de base uniquement. J'ai donc décidé d'aller avec dayJS : https://github.com/iamkun/dayjs

Screen Shot 2020-05-15 at 11 45 16 am

Je reçois également 249 Ko, je ne sais pas si le collaborateur va faire quelque chose à ce sujet.. déménagement à date.fns

Pas essayé, mais ce commentaire a beaucoup de likes :
#2517 (commentaire)

Cela a bien fonctionné pour tous ceux qui recherchent une optimisation rapide.
J'ai permis à mon moment de passer de 654,7 Ko à 178,4 Ko. C'est peut-être encore gros, mais c'est une amélioration.
J'aimerais que nous puissions importer la fonction en tant que date-fns.

Cette page vous a été utile?
0 / 5 - 0 notes