Moment: Die NPM-Paketgröße von moment.js ist lästig

Erstellt am 17. Aug. 2016  ·  26Kommentare  ·  Quelle: moment/moment

Ich habe die Dateigröße meines ./node_modules Ordners überprüft und es scheint, dass moment.js die schwerste Nicht-C-Bibliothek ist. 2,1 MB sind ziemlich viel. Ein kurzer Blick in die Ordnergröße zeigt:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

Das meiste Gewicht kommt von der Veröffentlichung komprimierter Versionen von moment.js mit npm sowie der doppelten Veröffentlichung aller Gebietsschemas. Aber allein die Schauplätze sind schon ziemlich schwer.

Daher dachte ich, es könnte gut für moment.js und die Community sein, diese Menge zu reduzieren?!

  • [ ] Wäre es möglich, den Ordner ./src nicht in npm ?
  • [ ] Wäre es möglich, den Ordner ./min von der Veröffentlichung in npm wegzulassen?
  • [ ] Wäre es möglich, den Ordner ./locales in ein separates Paket npm zu verschieben, um den Moment auf ein Minimum zu reduzieren?
BuilRelease

Hilfreichster Kommentar

der allgemeine Konsens ist, dass Speicherplatz in einer Node-App nicht so wichtig ist wie im Browser

Ich glaube nicht, dass man mit dieser Denkweise eine gute Bibliothek aufbauen kann.

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

In dem Moment, in dem die Leute erkennen, dass die Paketgröße ein echtes Problem ist und Sie sich entschieden haben, nichts dagegen zu tun, ist moment tot.
Für alle, die nach leichten Alternativen suchen, ist date-fns eine ausgezeichnete Wahl.

Alle 26 Kommentare

Die Leute nutzen Moment auf unterschiedliche Weise, und der allgemeine Konsens ist, dass Speicherplatz in einer Node-App nicht so wichtig ist wie im Browser.

Ich bin mir jedoch nicht sicher, was im Ordner min :

image

Ich bin mir nicht sicher, warum wir moment-with-locales.min.js in npm überhaupt brauchen. Es sollte ausreichen, moment.min.js und locales.min.js , oder?

Außerdem sollten nicht minimierte Dateien in einem min Ordner ( locale.js und moment-with-locales.js ) nicht erforderlich sein.

Der min-Ordner ist wirklich nur falsch benannt. Built könnte ein besserer Name sein. Aber genau dort leben die Dateien moment-with-locales und locales, bis wir den Update-Index-Grunt-Task zur Veröffentlichung ausführen.

Wir könnten sicherlich die moment-with-locales-Dateien speziell aus npm herausnehmen, aber ich bin mir nicht sicher, welchen Wert es bietet.

@martinheidegger kannst du bitte erklären, unter welchen Bedingungen die Größe des Gesamtpakets ein Problem ist. Das Paket wächst, da die Leute mehr Optionen für die Nutzung der Bibliothek wünschen. Wenn wir die Dinge, die Sie auflisten, entfernen möchten, müssen wir separate Pakete veröffentlichen, die in gewisser Hinsicht minimal sind, und dann auch ein großes Paket veröffentlichen, das alles enthält.

Können Sie ein Beispiel mit einer anderen Bibliothek geben, die in einigen/allen ihrer npm-Builds alles auf das Nötigste reduziert?

Die npm-Installation von lodash ist 1,4 MB groß, während die minimierte nur _69 KB_ beträgt.
Die Tatsache, dass lodash auch jede Funktion als eigenes Paket veröffentlicht, führt nur zu einer langen Liste von Paketen, die wieder installiert werden, weil sie in einem anderen Paket referenziert werden.
Wenn ich mir meinen typischen node_modules-Ordner mit einer Größe von etwa 300 MB anschaue, bin ich mir nicht sicher, ob es sich lohnt, moment.js etwas kleiner zu machen.

Und es gibt noch viel mehr, Event viel größer, hier sind nur einige davon

  • rx: 6,6 MB
  • rxjs: 3,3 MB
  • @angular : 10,8 MB
  • Intl: 79,1 MB
  • Grunzen: 6,2 MB

Obwohl mir die Größe des npm-Pakets egal ist, finde ich es erstaunlich, dass ich 58 KB für manipulierte Daten auf vernünftige Weise einschließen muss (vorausgesetzt, ich brauche keine Locales, die viel schwerer sind)

Ich bin es leid, über so etwas zu streiten. Ich dachte, ein geringerer Platzbedarf würde die Installation meines Pakets beschleunigen (der Moment ist der größte). Ich glaube, ich laufe gegen Windmühlen. Also: kthxbye.

@martinheidegger probiere Garne aus, zumindest sind sie vernünftiger als npm und cachen das Paket, also solltest du nicht so viel Zeit mit Downloads verbringen :)

ich stehe vor dem gleichen Problem. Wenn Sie import moment from 'moment'; ausführen, erhöht sich die Bundle-Größe von 30kb auf 250kb!!! Gibt es eine einfache Lösung Jungs??

@paramsingh88 Klingt so, als ob die einzige Option darin besteht, es nicht zu verwenden. Habe diesen Thread wegen des gleichen Problems gefunden. Meine Projektgröße erhöht sich um 58kB, indem ich einfach moment.unix(created).format('MMMM D, YYYY') mache. Absolut verrückt!

Ich verstehe diese Einstellung nicht:

Speicherplatz in einer Node-App ist nicht so wichtig wie im Browser.

Das Problem ist, dass moment keine Node-App ist, sondern eine Bibliothek, die entweder in einer Back-End-Anwendung oder in der Front-End-Bibliothek verwendet werden kann. In diesem Fall muss ich Moment.js verwenden, um Daten im Front-End der Anwendung zu validieren, bevor ich sie an das Backend sende (das über eine eigene, separate Validierung verfügt).

Die Momentengröße ohne Locales beträgt 50k (minifiziert), die Größe mit Locales beträgt etwa 300k (minifiziert). Wenn Sie etwas dagegen tun möchten, überprüfen Sie die Diskussion hier https://github.com/moment/moment/issues/2373

Und wenn Sie einen Paketmanager verwenden oder was auch immer das Leben kompliziert macht, bringen Sie sie auch mit.

Es tut mir leid. (bearbeitet)

der allgemeine Konsens ist, dass Speicherplatz in einer Node-App nicht so wichtig ist wie im Browser

Ich glaube nicht, dass man mit dieser Denkweise eine gute Bibliothek aufbauen kann.

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

In dem Moment, in dem die Leute erkennen, dass die Paketgröße ein echtes Problem ist und Sie sich entschieden haben, nichts dagegen zu tun, ist moment tot.
Für alle, die nach leichten Alternativen suchen, ist date-fns eine ausgezeichnete Wahl.

Hallo, npm moment ist ungefähr 3 MB, dies wirkt sich jedoch auf die Größe des Lambda-Bearbeitungs-Inline-Tools aus. verkleinern würde auf jeden Fall helfen

Wenn ich dies in einer gzipped Angular-App verwende, ist dies 70 % der Größe meiner kleineren Pakete. Wäre toll, wenn wir Funktionen ausschließen könnten, die wir nicht brauchen, da ich im Moment das ganze Paket import * as moment from 'moment' .

moment.js verdoppelt im Grunde die Größe eines Großteils meiner Angular-Anwendung:

image

Das tut auf mobilen Geräten wirklich weh.

@silentsnooc Zur Laufzeit sollten Sie nur die Gebietsschemas laden, die Sie benötigen. Das Hauptanliegen für Sie besteht also darin, Locales-Dateien nur dann zu laden, wenn Sie sie verwenden.

@kylekatarnls Wenn Sie ein Beispiel für diejenigen von uns zeigen könnten, die Bundler verwenden, wäre das hilfreich. Danke.

Das Beispiel für JSPM im Dokument hier:
https://momentjs.com/docs/#/i18n/loading -into-browser/

funktioniert auch für Webpack, und ich denke, es kann die Arbeit für andere Bundler erledigen.

Nicht ausprobiert, aber dieser Kommentar hat viele Likes:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

Ich glaube, moment.js war nicht für die Verwendung im Browser-Frontend gedacht und es gab keine Pläne der Betreuer, dies zu tun. Als wir mit einem ähnlichen Problem konfrontiert wurden, verwendeten wir date-fns im Frontend und behielten moment.js im Backend. Für ein neues Projekt würde ich sehen, ob date-fns an beiden Enden verwendet werden könnte.

@demisx Mehr muss ich nicht sehen:

image

Danke für den Tipp. :+1: Danke auch an @xinghul, der es zuerst erwähnt hat.

Finden Sie eine kleinere Lib, die eine Alternative zu moment.js

https://github.com/iamkun/dayjs

Momentjs gerade durch dayjs ersetzt. Scheint für meine Zwecke gut zu funktionieren und es sind nur etwa 15 KB mit Locale und FromNow-Plugin-Set. Fantastisch.

Ionic 4/Angular 8 App Bundle Größenunterschiede:

mit momentJS : es fügt = 204 KB

mit dayJS : es fügt = 6 KB

Ich benötige nur grundlegende Daten-/Zeitformatierungen und -manipulationen. Also habe ich mich für dayJS : https://github.com/iamkun/dayjs

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

Ich bekomme auch 249 KB, bin mir nicht sicher, ob der Mitarbeiter etwas dagegen unternehmen wird. Umzug nach date.fns

Nicht ausprobiert, aber dieser Kommentar hat viele Likes:
#2517 (Kommentar)

Dies funktionierte gut für alle, die nach einer schnellen Optimierung suchen.
Erlaubte meinem Moment, von 654,7 kB auf 178,4 kB zu steigen. Es mag immer noch groß sein, aber es ist eine Verbesserung.
Ich wünschte, wir könnten die Funktion als Datums-Fns importieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen