0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[node][pnpm]node_modulesにいる“お前誰だよ”を調査する

0
Posted at

お前は誰の回しもんや?

どこの世界・界隈にも、熱狂的な信者はいるもので、様々なSNSで布教活動が日々繰り広げられているかと。

やれVimが最高だの、Emacsが至高だの、VSCodeが1番だの、Eclipseはクソだの、Cが最強だの、JQueryなんて時代遅れだのなんだのと、

一体お前はどこの回しもんだ?
ただ単に新しい技術に乗れなかったから古い技術を推してるんじゃないのか?
単純に流行に乗ってコレが1番だと言いたいだけなんじゃないか?

と、思いつつツール・技術選定に役立たせていただいております(誠に有難うございます

どうもとりあえず流行に乗ればいいんでしょ?なえ~すけさんです。

まぁ今回もpnpmのユルイ布教活動ですが、どうぞ読んでいってね!

node_modulesにいるアレ

Node開発をしている初心者やNodeなんとなく使ってる勢はこんなことを思うのでは無かろうか。

なんでこのライブラリ入ってるんだ……?

package.jsonには書いてない。
でもnode_modulesにはいる。

そうだね、
npm installすると依存するアレも一緒に入ってきちゃうアレだね(エビバディパッション

そんなときの pnpm why

例えばlodashを調べたい場合

pnpm why lodash

すると

project
└─ packageA
   └─ lodash

みたいに

「誰が依存しているのか」 を追跡できるわけで。

地味だけどめちゃくちゃ便利

特に便利なのがこの辺。

① 謎ライブラリ調査

気づいたら増えてる謎package。

pnpm why left-pad

すると

「あー、お前経由か」

が分かる。
→node_modules探検隊をしなくて済むね

② 脆弱性調査

npm auditで

critical vulnerability

とか出たとき。

まず思う。

「いや誰が使ってんの?」

そんなときには

pnpm why minimist

これで依存元を特定できる。

③ package削除できるか確認

dependencies整理してると

「これ消して大丈夫か?」

となる。

そんなときも

pnpm why axios

で確認できる。

④ monorepoで真価を発揮する

workspace構成だと特に便利。

apps/frontend
apps/backend
packages/shared

みたいな構成で

「どこが依存してるんだっけ?」

を即確認できる。

npmにもあるけど、pnpmは見やすい

npmにも npm why はあるけど、個人的には

pnpmのほうが依存関係がかなり追いやすい

実際かなり助かる場面

地味に多いのがこれかなと

package消したのに容量減らない

調べたら別package経由でまだ使われてた みたいなケース。

まとめ

実務で余り使う機会は少ないかも知れませんがpnpm why

  • 謎ライブラリ調査
  • 脆弱性対応
  • dependencies整理
  • monorepo管理

この辺でかなり役立つかなと。
※特にNPMから移行するとかになった時に消していいか迷うようなケースが有る場合

Node開発を長くやっていると、
「誰が選定したのか記憶にない、なんで入ってるか分からないライブラリ」
が少しずつ増えていく。

そして数ヶ月後。
誰も理由を説明できなくなる。
そうなる前に、ちゃんと依存関係を把握しておくと後で混乱しなくていいのかななんて思ったり思わなかったり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?