Movatterモバイル変換


[0]ホーム

URL:


Fork me on GitHub

Web Scratch

ブラウザ/JavaScript等についてのブログ

Profile

azu

twitterblueskyGitHubRSS

npm/yarn/pnpm/bunを同じコマンドで扱える ni のzsh実装を書いた

2023年03月24日Edit on GitHub

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.zshsourceni.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 できるようになっています。

コマンドnpmyarnpnpmbun
ninpm installyarn installpnpm installbun install
ni add <pkg>npm installyarn addpnpm addbun add
ni remove <pkg>npm uninstallyarn removepnpm removebun remove
ni run <script>npm runyarn runpnpm runbun run
ni testnpm run testyarn run testpnpm run testbun run test
ni upgradenpm upgradeyarn upgradepnpm update
ni upgrade-interactivenpm-check -uyarn upgrade-interactivepnpm update -i

Note

自分が Yarn v2+を使ってるプロジェクトを持ってないので、Yarn v2+のプロジェクトは多分対応できてません。また、pnpm と bun も結構適当に書いているので、実際に動いてるかはわかりません。この辺は PR 待っています。

ライセンスは MIT ライセンスで、1 ファイルなので自分の用途に合わせて加工して使ってもらっても大丈夫です。

修正リクエストをする

お知らせ欄

JavaScript Primerの書籍版がAmazonで購入できます。

JavaScriptに関する最新情報は週一でJSer.infoを更新しています。

GitHub Sponsorsでの支援を募集しています。

関連記事


[8]ページ先頭

©2009-2025 Movatter.jp