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

nodejs界の巨匠、[sindresorhus](https://www.npmjs.com/~sindresorhus)先輩の作品にこんなmoduleがあります。

[got \- npm](https://www.npmjs.com/package/got)

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](https://packagephobia.now.sh/badge?p=request)](https://packagephobia.now.sh/result?p=request)

## [Package Phobia](https://packagephobia.now.sh/)

[Package Phobia](https://packagephobia.now.sh/)はnpmに上がっているmoduleのサイズを計測してくれるwebサービスです。

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

ちなみに先輩のgotは[![install size](https://packagephobia.now.sh/badge?p=got)](https://packagephobia.now.sh/result?p=got)です。

## 色々調べてみる

[npm rank](https://gist.github.com/anvaka/8e8fa57c7ee1350e3491)はnpmパッケージのランキングを自動集計して掲載しているgistです。

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

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

1. [![install size](https://packagephobia.now.sh/badge?p=lodash)](https://packagephobia.now.sh/result?p=lodash) lodash - 52071 
2. [![install size](https://packagephobia.now.sh/badge?p=request)](https://packagephobia.now.sh/result?p=request) request - 30113 
3. [![install size](https://packagephobia.now.sh/badge?p=chalk)](https://packagephobia.now.sh/result?p=chalk) chalk - 27947 
4. [![install size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) commander - 24117 
5. [![install size](https://packagephobia.now.sh/badge?p=express)](https://packagephobia.now.sh/result?p=express) express - 21873 
6. [![install size](https://packagephobia.now.sh/badge?p=async)](https://packagephobia.now.sh/result?p=async) async - 20646 
7. [![install size](https://packagephobia.now.sh/badge?p=react)](https://packagephobia.now.sh/result?p=react) react - 20184 
8. [![install size](https://packagephobia.now.sh/badge?p=debug)](https://packagephobia.now.sh/result?p=debug) debug - 17892 
9. [![install size](https://packagephobia.now.sh/badge?p=underscore)](https://packagephobia.now.sh/result?p=underscore) underscore - 15641 
10. [![install size](https://packagephobia.now.sh/badge?p=bluebird)](https://packagephobia.now.sh/result?p=bluebird) bluebird - 15605 
11. [![install size](https://packagephobia.now.sh/badge?p=moment)](https://packagephobia.now.sh/result?p=moment) moment - 15604 
12. [![install size](https://packagephobia.now.sh/badge?p=fs-extra)](https://packagephobia.now.sh/result?p=fs-extra) fs-extra - 14409 


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

一番驚いたのは`lodash`1.34MBに対して`underscore`が109KBということ。  
1340÷109 = 12.293577982です。12倍のサイズです`lodash`さん。

ちなみに`lodash`は個別にインストールできます。`lodash.map`単独だと  
[![install size](https://packagephobia.now.sh/badge?p=lodash.map)](https://packagephobia.now.sh/result?p=lodash.map)です。

そして某CDNサービスで`lodash.min.js`を見てみたら72KBでした。  
なんだろ。npm経由だとなんでこんなにデカくなるんだろ。

## あとがき

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