Moment: moment.jsのNPMパッケージサイズが面倒

作成日 2016年08月17日  ·  26コメント  ·  ソース: moment/moment

./node_modulesフォルダーのファイルサイズを確認しましたが、moment.jsが最も重い非Cライブラリのようです。 2.1MBはかなり多いです。 フォルダサイズをざっと見ると、次のことがわかります。

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

重みの大部分は、moment.jsの圧縮バージョンをnpm公開することと、すべてのロケールを二重公開することから生じます。 しかし、ロケールだけでもそれ自体はかなり重いです。

そのため、moment.jsとコミュニティにとって、この量を減らすのは良いことだと思いました。

  • [] ./srcフォルダをnpmへの公開から除外することは可能でしょうか?
  • [] ./minフォルダをnpmへの公開から除外することは可能でしょうか?
  • [] ./localesフォルダを別のnpmパッケージに移動して、モーメントを最小限に抑えることは可能でしょうか?
BuilRelease

最も参考になるコメント

一般的なコンセンサスは、ノードアプリのディスク容量は、ブラウザの場合と同じようにプレミアムではないということです。

このような考え方で良いライブラリを構築できるとは思いません。

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

バンドルサイズが本当の問題であることに人々が気づき、あなたがそれについて何もしないことを選択した瞬間、 momentは死んでしまいます。
軽量の代替品を探している人にとっては、 date-fnsが最適です。

全てのコメント26件

人々はさまざまな方法でモーメントを使用します。一般的なコンセンサスは、ノードアプリのディスク容量は、ブラウザーの場合と同じようにプレミアムではないということです。

とはいえ、 minフォルダーで何が起こっているのか正確にはわかりません。

image

npmにmoment-with-locales.min.jsが必要な理由がわかりません。 moment.min.jslocales.min.jsがあれば十分でしょう?

また、 minフォルダー( locale.jsおよびmoment-with-locales.js )内の最小化されていないファイルは必要ありません。

minフォルダは実際には誤った名前になっています。 構築された方が良い名前かもしれません。 しかし、それは、リリースのためにupdate-index gruntタスクを実行するまで、moment-with-localesファイルとlocalesファイルが存在する場所です。

特にnpmからlocalesの瞬間ファイルを取り出すことは確かにできますが、それがどのような価値を提供するのかはわかりません。

@martinheideggerは、どのような条件下でパッケージ全体のサイズが問題になるのか説明していただけますか。 人々がライブラリを消費するためのより多くのオプションを望んでいるので、パッケージは大きくなります。 リストしたものを削除する場合は、いくつかの点で最小限の個別のパッケージを公開してから、すべてを含む大きなパッケージも公開する必要があります。

npmビルドの一部またはすべてですべてを最小限に抑える別のライブラリの例を挙げていただけますか?

lodashのインストールNPMそれが唯一_69 KB_だ縮小さながら、1.4メガバイトであります
lodashがすべての関数を独自のパッケージとして公開しているという事実は、別のパッケージで参照されているため、再度インストールされるパッケージの長いリストにつながるだけです。
サイズが約300MBの典型的なnode_modulesフォルダーを見ると、moment.jsを少し小さくするために努力する価値があるかどうかはわかりません。

そして、もっとたくさんのイベントがあります、ここにそれらのほんの一部があります

  • rx:6,6 MB
  • rxjs:3.3 MB
  • @angular :10.8 MB
  • 国際:79,1 MB
  • うなり声:6.2 MB

npmパッケージのサイズはあまり気にしませんが、操作された日付に58KBを適切な方法で含める必要があることに驚かされます(はるかに重いロケールが必要ないと仮定した場合)😞

私はこの種のことを議論するのにうんざりしています。 フットプリントが小さいほど、パッケージのインストールが速くなると思いました(その瞬間が最大です)。 私は風車に逆らって走っていると思います。 だから:kthxbye。

@martinheideggerはyarnを試してみてください。少なくとも、npmよりも正気で、パッケージをキャッシュするので、ダウンロードにそれほど多くの時間を費やすべきではありません:)

私は同じ問題に直面しています。 import moment from 'moment';すると、バンドルサイズが30kbから250kbに増加します!!! 簡単な解決策はありますか?

@ paramsingh88唯一のオプションはそれを使用しないことのようにmoment.unix(created).format('MMMM D, YYYY')実行するだけで、プロジェクトのサイズが58kB増加します。 絶対にクレイジー!

私はこの態度を理解していません:

ノードアプリのディスク容量は、ブラウザの場合と同じようにプレミアムではありません。

問題は、モーメントがノードアプリではなく、バックエンドアプリケーションまたはフロントエンドライブラリのいずれかで使用できるライブラリであるということです。 この場合、はい、Moment.jsを使用して、アプリケーションのフロントエンドで日付を検証してから、バックエンドに送信する必要があります(独自の個別の検証があります)。

ロケールなしのモーメントのサイズは50k(縮小)、ロケールありのサイズは約300k(縮小)です。 それについて何かしたい場合は、 https://github.com/moment/moment/issues/2373のディスカッションを確認して

また、パッケージマネージャーなど、生活を複雑にしているものを使用している場合は、それらも導入してください。

すみません、悪いです。 (編集)

一般的なコンセンサスは、ノードアプリのディスク容量は、ブラウザの場合と同じようにプレミアムではないということです。

このような考え方で良いライブラリを構築できるとは思いません。

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

バンドルサイズが本当の問題であることに人々が気づき、あなたがそれについて何もしないことを選択した瞬間、 momentは死んでしまいます。
軽量の代替品を探している人にとっては、 date-fnsが最適です。

こんにちは、npmモーメントは約3mbですが、これはラムダ編集インラインツールのサイズに影響します。 縮小は間違いなく役立ちます

gzipで圧縮されたAngularアプリでこれを使用すると、小さなバンドルの70%のサイズになります。 現時点ではパッケージ全体をimport * as moment from 'moment'する必要があるため、不要な機能を除外できれば素晴らしいと思います。

moment.jsは基本的に私のAngularアプリケーションの主要部分のサイズを2倍にします:

image

これはモバイルデバイスでは本当に痛いです。

@silentsnooc実行時に、必要なロケールのみをロードすることになっています。 したがって、主な懸念事項は、ロケールファイルを使用する場合にのみ遅延ロードすることです。

@kylekatarnlsバンドラーを使用している私たちの例を示すことが

こちらのドキュメントに記載されているJSPMの例:
https://momentjs.com/docs/#/i18n/loading -into-browser /

webpackでも機能し、他のバンドラーでも機能すると思います。

試していませんが、このコメントにはたくさんのいいねがあります:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

moments.jsはブラウザのフロントエンドで使用するためのものではなく、メンテナから使用する予定はなかったと思います。 同様の問題が発生したとき、フロントエンドでdate-fnsを使用し、バックエンドでmoments.jsを維持することになりました。 新しいプロジェクトの場合、 date-fns両端で使用できるかどうかを確認します。

@demisxもっと見る必要はありません:

image

ヒントをありがとう。 :+1:最初に言及した@xinghulにもthx。

moment.js代わりとなる、より小さなサイズのlibを見つけます

https://github.com/iamkun/dayjs

momentjsをdayjsに置き換えただけです。 私の目的にはうまく機能しているようで、ロケールとfromNowプラグインが設定されているのは約15Kbです。 素晴らしい。

Ionic 4 / Angular 8アプリバンドルのサイズの違い:

momentJS :追加= 204 KB

dayJS :追加= 6 KB

基本的なデータ/時間のフォーマットと操作のみが必要です。 だから私はdayJS行くことにしました: https

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

私も249kbを取得していますが、共同編集者がこれについて何かをするかどうかはわかりません。date.fnsに移動します。

試していませんが、このコメントにはたくさんのいいねがあります:
#2517(コメント)

これは、迅速な最適化を探しているすべての人にとってうまく機能しました。
私の瞬間を654.7kBから178.4kBに変更することができました。 それでも大きいかもしれませんが、それは改善です。
関数をdate-fnsとしてインポートできたらいいのにと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価