◆ 数個のパッケージを入れるだけで依存でいっぱい入って node_modules のファイルが多すぎる
  ◆ 同じことするのにパッケージごとに別のパッケージを使ってたりする
  ◆ 直接書けばいいレベルのでもパッケージ使ってることがある
  ◆ 必要機能以上に高機能なパッケージが使われてて依存パッケージが多くなってたりもする
  ◆ 最新版では標準にある機能でも polyfill 系ライブラリを入れて使ってるものがある
◆ node_moduels のファイル数多いしサイズも重いし起動時のロードが遅い

ちょっとしたものを作るだけならわざわざ npm のパッケージに頼るほどでもないので 基本はパッケージに頼らず自分で作ってました
でも 少しちゃんとしたものを作ろうとすると Node.js 標準機能ではいろいろ足りないし自分で作るのも大変なので npm パッケージに頼ることになります

使ってみると簡単にインストールできて使えるのでいろいろ入れていたのですが 最近はまた自力で作るほうが良いかなと思い始めました

インストールされるパッケージ多すぎ

使ってみるとすごく感じるのですが依存パッケージが多すぎです
たかだか 10 程度のパッケージをインストールしただけなのに依存パッケージのせいで node_modules のファイルは数百や数千になって フォルダサイズは 30MB 以上なんてことになります
(もちろん依存が少ないものを探して入れればそんなことにはなりません)

少し前にあるパッケージが使えなくなって多くのパッケージが影響を受けたトラブルがありましたね
パッケージを調査して 数行程度の自分で書けばいいレベルの機能でさえ依存パッケージ頼りにしてるパッケージが多いなんてことを書いた記事をいくつか見かけました
そろそろ改善して必要以上な依存関係が減ってるかと思いましたがそうでもないみたいです

実際には一部の機能しか使わないのにすごく高機能なパッケージを内部で使ってるとか普通にあります
作者がそれに慣れていたとか 有名ドコロだからとりあえずとかでしょうか
中にはこのツールのどこでこのパッケージを使ってるの?というような依存があったりもします
探してみるとほぼ使われない隠し機能みたいな そういうこともできるよ 程度のものだったりすることもあります
(パーサとか Babel とかが入ってることが多い気がします)
使い方がどうであろうと 高機能なパッケージはいろいろなパッケージを必要としていることが多く 使う側がちょっとした機能しかないツールだからとインストールしてみたらすごくいっぱいのパッケージが入るなんてことがあります

また npm では 1 つの機能のためのパッケージが多数あって どれかが一強というわけでなくどれもそれなりにユーザが居るということが多い印象です
そのせいで A というパッケージを入れたら A が B と C のパッケージに依存していて B と C ではある同じ機能のために B では D を C では E を使っていることがあります

図にするとこんなイメージです
- A
- B
- D
- C
- E

D と E は同じ目的のツール

両方が D または E を使っていたら 1 つで済むのに別々のものを使うために同じ機能を持つ別パッケージ D と E の両方がインストールされます

つらい……自分で作ろう

そのせいで 自力で作れるものなら自分で作ろうという気分になります
それで適当に作り始めるものの たいていの場合途中でめんどくさくなってくるのですよね
特に細かい部分で通常は想定しない場合はどうするのだろう?とか考えてると既存のものに任せたくなってきます

最近だとコマンドライン引数をパースするパッケージの yargs がなんか好きになれなくて 自分でパーサを作っていたのですが後半は割と適当になっていろいろ改善点が残ってる状態です
https://gist.github.com/2d3871b9794c0707b9c23cbcc24b91af

その後一度扱いやすい形式に変換してから オプションに応じてパースさせるほうがいいかなとか思いついて一段階目のパースする関数は作ったものの残りが面倒になってやっぱり放置です
https://gist.github.com/63859ba1bdb87be7caa3e6fd61cfae6f

求めてたのは yargs みたいなメソッドチェーンであれこれ追加していくものじゃなくて JSON で定義ファイル使うような感じでオプションはオブジェクトで指定するものです
それだけなのに作ってみると -- だけの場合の扱いとか -ab1 みたいなときに 1 は b に対応するものなのか -1 みたいにオプションとするのかなど考える部分が思いの外多かったのですよね

古いのもなんか避けたい

他のパッケージを使うことをためらう理由はコードが古いことがあります
Node.js も変化が早いですし 昔からあるものだと新しい書き方に合わせて一から作り直すのは大変だと思います
それに古いバージョンを使ってる人もサポートするには古いコードのままのほうが良いということもあります

でも 新しい書き方を使っていきたい私からすると ソース見ていて「新しい機能や書き方を使えば半分くらいに減らせるのに」とか思ってしまって無駄が多いのってあんまり使いたくないなって思ってしまいます
使うだけなら見なくても良いのですが なんだかんだ動きが気になったときやちょっと修正したいとかあったらソース触ることになりますから そのときに古い書き方で読みづらいものだと辛いのです

特に 今だと Node.js の標準にある機能を使うために polyfill 系のライブラリを依存にしてると無駄なものでファイル数や容量増えるわけなので敬遠しがちです
async とか bluebird とか
コピーとかしなければファイル数はそこまで問題ではないのですが 初期起動のロードで数秒待たされるのはけっこうストレスになるのですよね

依存とか気にせず web フレームワーク・テンプレートエンジン・コマンドラインパーサ・http クライアント あとちょっとしたライブラリ数個入れたプロジェクトを実行したときは 実行から web サーバ起動完了するまで 5 秒弱も掛かっていて 思い通り動いてなくてコードを少し変えて試すだけで結構待たされました

どんどん新しい機能が追加されて変化が早いのって自分で一から書くのに限定すれば良いことが多いですが 外部のパッケージ使うとデメリットも多いですね