npm/yarn/pnpm/bunを同じコマンドで扱える ni のzsh実装を書いた
ni
という npm/yarn/pnpm/bun を同じコマンドでインストール/アンストールコマンドを実行できるツールがあります。
仕組み的には、各パッケージのロックファイルやCorepackで決められたpackageManager
フィールドの値から、どのパッケージマネージャを使うかを判断しています。
たとえば、package-lock.json
があるプロジェクトなら npm を使ってるので、ni
コマンドは npm のコマンドを実行します。
また、packageManager
フィールドがyarn@<version>
になっている場合は、ni
コマンドは yarn コマンドを実行します。
なぜこういうツールが必要になるかというと、npm や yarn などのパッケージマネージャは、それぞれのパッケージマネージャのコマンドが異なるためです。
たとえば、npm ではnpm install <pkg>
でパッケージを追加できますが、yarn ではyarn add <pkg>
でパッケージを追加します。
色々なオープンソースプロジェクトをやっていると、プロジェクトで npm/yarn/pnpm/bun など使ってるものが異なるので、コマンドを意識して使い分ける必要が出てきて大変です。
ni
はこれをn?
というコマンド一つにまとめるというものです。
antfu/niを使うのも良いと思ったのですが、Node.js である必要性もあんまりないのと、それぞれがコマンドとして実装されていて名前が被りそうな問題が気になりました。
たとえば、npm run
に相当するのがnr
で、npm upgrade
に相当するのがnu
という形になっています。
これだと、コマンドが増えると別のコマンドと被りそうなので、ni run
のようにサブコマンドにした方がいいかなと思いました。
そこで、zsh で実装してみました。
ni.zsh
実装は次のリポジトリにあります。
1 ファイルだけのシンプルなものなので、次のようにダウンロードして使うことができます。
curl https://raw.githubusercontent.com/azu/ni.zsh/main/ni.zsh > ni.zsh
source ni.zsh
あんまり zsh スクリプトの適切な配布がわからないので、誰かがいい感じにしてくれると思います。
オリジナルのni
とは違って、サブコマンドとして実装しているので、ni run
のようにサブコマンドを使うことができます。
ni -- install current package.json | npm install相当
ni add <pkg> -- add package | npm install <pkg>相当
ni remove <pkg> -- remove package | npm uninstall <pkg>相当
ni run <script> -- run scripts | npm run <script>相当
ni test -- run test script | npm test相当
ni upgrade -- upgrade packages | npm upgrade相当
ni upgrade-interactive -- upgrade package interactively| npmにはないのでnpm-check -uを使う
内部的には、ロックファイルとpackageManager
フィールドを見て、どのパッケージマネージャを使うかを判断するのは大体同じです。
ni <Tab>
でサブコマンドを Auto Complete できるようになっています。
コマンド | npm | yarn | pnpm | bun |
---|---|---|---|---|
ni |
npm install |
yarn install |
pnpm install |
bun install |
ni add <pkg> |
npm install |
yarn add |
pnpm add |
bun add |
ni remove <pkg> |
npm uninstall |
yarn remove |
pnpm remove |
bun remove |
ni run <script> |
npm run |
yarn run |
pnpm run |
bun run |
ni test |
npm run test |
yarn run test |
pnpm run test |
bun run test |
ni upgrade |
npm upgrade |
yarn upgrade |
pnpm update |
○ |
ni upgrade-interactive |
npm-check -u |
yarn upgrade-interactive |
pnpm update -i |
○ |
Note
自分が Yarn v2+を使ってるプロジェクトを持ってないので、Yarn v2+のプロジェクトは多分対応できてません。 また、pnpm と bun も結構適当に書いているので、実際に動いてるかはわかりません。この辺は PR 待っています。
ライセンスは MIT ライセンスで、1 ファイルなので自分の用途に合わせて加工して使ってもらっても大丈夫です。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。