Help us understand the problem. What is going on with this article?

インストールサイズで見るnpmパッケージベスト10

More than 1 year has passed since last update.

nodejs界の巨匠、sindresorhus先輩の作品にこんなmoduleがあります。

got - npm

httpリクエストして取得するというmoduleですが、READMEにこんな一文があります。

Got is a human-friendly and powerful HTTP request library.

It was created because the popular request package is bloated: Install size

訳: Gotは人間にやさしく強力なHTTPリクエストライブラリです。
これは、一般的なリクエストパッケージが膨れているために作成されました。

それと共にこんなbadgeが張られています。

install size

Package Phobia

Package Phobiaはnpmに上がっているmoduleのサイズを計測してくれるwebサービスです。

先ほどの例に上げたpopular request packageのインストールサイズは4.46MBということになります。

ちなみに先輩のgotはinstall sizeです。

色々調べてみる

npm rankはnpmパッケージのランキングを自動集計して掲載しているgistです。

Top 1000 most depended-upon packagesという被依存数が多いパッケージのランキング上位から抜粋、Package Phobiaのバッジを張ってみました。

2018/12/08現在のランキングです。

  1. install size lodash - 52071
  2. install size request - 30113
  3. install size chalk - 27947
  4. install size commander - 24117
  5. install size express - 21873
  6. install size async - 20646
  7. install size react - 20184
  8. install size debug - 17892
  9. install size underscore - 15641
  10. install size bluebird - 15605
  11. install size moment - 15604
  12. install size fs-extra - 14409

こうしてみるとrequestデカいですね。逆にreactは意外とコンパクト。
bluebirdとかfs-extraは無駄にデカいと勝手に思い込んでたけどそうでもない。(個人の感想です)

一番驚いたのはlodash1.34MBに対してunderscoreが109KBということ。

1340÷109 = 12.293577982です。12倍のサイズですlodashさん。

ちなみにlodashは個別にインストールできます。lodash.map単独だと

install sizeです。

そして某CDNサービスでlodash.min.jsを見てみたら72KBでした。

なんだろ。npm経由だとなんでこんなにデカくなるんだろ。

あとがき

webpackとか使うと手軽に依存してしまってプロジェクトが肥大化してしまいますが、ちょっとの工夫で削減できるはず。気をつけよっと😁

__mick
nodejs,coffee-script等で遊んでいます。 https://github.com/mick-whats
https://twitter.com/mick_x_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away