[OSS] npm init -w がどのように実行されるのか調べてみた
今回はnpm init -w
について調べてみました。
最近npm workspaceを触ることがありまして「そもそもnpm <command>
ってどう実行されてるねん」と思ったのがきっかけです。
では、いきましょう。
Repository
早速読んでいく
rootにindex.js
があります。
こちらでは、シンプルに./lib/cli.js
を読み込んでいるだけです。
./lib/cli.js
を見てみると実際にexecしている箇所があります。
こちらは./npm.js
を実行してるみたいです。
npm.js
では実行されたcommandのfileをさらに実行しています。
そろそろnpm init
が見えてきましたね。
実際のcommands direcotryはこんな感じです。
お馴染みのinstall
やuninstall
のファイルがありました。改めて見ると、OSSとは言えど泥臭くやってるんだなーと言うことが伺えます。
本題のinit.js
はこちら。
しかしnpm.js
で実行されていたcmdExecはここにはなくbase-commands.jsに定義されています。
そして、ついにworkspaceの実行部分がありました。
configの部分は.npmrc
の部分が参照されています。なので下記のように.npmrc
を書いてnpm init
を実行すればデフォルトでnpm init -w
が実行されます。
workspace=true
npm <command>を実際に動かす方法
やはり、コードを読むだけでは引数に何が入ってるのかどんなデータで処理されてるのかが見えにくいので今回はlocalで実際に動かしてdebugもしてみました。
方法はすごく簡単で、rootで下記のコマンドを実行するだけです。
node index.js init -w
あとは、気になるところでbrake pointを入れてデータの中身を見て追っていくだけです。
まとめ
今回はnpm init -w
について調べてみました。厳密にはコマンドが実行されるまでの処理の流れの記事にはなってしまいましたが、実行された後のコードも読んでみるとpackage.jsonがcreateされる箇所もあったりと(当たり前だろ)、いつも何気なく実行してるコマンドがどのように処理されてるのかを知る良い機会になりました。
また、debugを行うことでグッと読みやすくなるので、もし気になる処理があったら読んでみると面白いと思います。
まだまだ気になってる技術があるので調べたら記事にしてます。
閲覧ありがとうございました!
Discussion