まだyarnやnpmやpnpmの打ち間違いで消耗してるの?
まだパッケージマネージャーの打ち間違いで消耗してるの?
初手煽りタイトル失礼します。よだかと申します。
僕はフリーランスでいくつかプロジェクトをやらせてもらっているのですが、プロジェクトごとにパッケージマネージャーが違ったりします。
これがかなり辛く、yarnのプロジェクトでnpm installしてpackage-lock.jsonを生成してしまったり、npmのプロジェクトでyarn installしてyarn.lockを生成してしまったり。。
果ては、yarn devなのか、npm run devなのか、など気をつけないいけないことがかなり多いです。
そこで今回ご紹介したいのがniというツールです。
niについて
niについて説明するために、READMEを見てみましょう。
まずは一行目です。
npm i in a yarn project, again? F**k!
とても強い思いから生まれたツールであるということがわかりますね。
そこからREADMEを読み進めてみますと、ni - use the right package managerと書かれています。
端的に言うと、プロジェクトに使われているパッケージマネージャーを自動的に選んでコマンドを実行してくれるツールです。
以下に使用例を示します。
install系
# install
ni
# viteをinstall
ni vite
# @types/nodeをdevDependanciesにinstall
ni @types/node -D
# clean install
ni --frozen
# 同じくclean install
nci
# eslintをglobal install
ni -g eslint
# upgrade
nu
# upgrade-interactive
nu -i
# uninstall
nun webpack
run系
# いつものrunコマンド
nr dev --port=3000
# scriptをインタラクティブに決定できる
nr
? script to run ›
❯ dev - run-p dev:next dev:path
dev:next - node ./server/server.js
dev:path - pathpida --ignorePath .gitignore --watch
build - pathpida --ignorePath .gitignore && next build
start - next start
lint - next lint
prettier - prettier --write .
storybook - start-storybook -p 6006
build-storybook - build-storybook
# 直前のコマンドをrerunする
nr -
# npx,yarn dlxに該当する実行する系のやつ
nix vitest
その他
# agent-alias(yarn, npm, などパッケージ名だけのコマンド)
na
小話
ni
ここまで読んだあなたはniのiがinstallのiだったことに気づくでしょう。
nixやnuやnunなどコマンド名が可愛くて明快で好きです。(nunはnuiでも良かった気がする)
また、このパッケージの作者は実はVueやNuxtやViteのコアチームの方で、antfuさんと言います。
どうやって使うパッケージマネージャーを判定しているのか
ni assumes that you work with lockfiles (and you should)
Before it runs, it will detect your yarn.lock / pnpm-lock.yaml / package-lock.json / bun.lockb to know current package manager (or packageManager field in your packages.json if specified), and runs the corresponding commands.
と書いてあるので、lockファイルがあればそれを見て判断、またはpackage.jsonのpackageManagerフィールドを見て判断しているそうです。
なので、大体の場合niをローカルでグローバルインストールするだけで動きます。
注意:パスは通してくれないので、source ~/.zshrcするかターミナルを立ち上げなおす必要があります。
終わりに
niを使うことでプロジェクト間のパッケージマネージャーのコマンドの違いを吸収することができます。
これでもっと請け負えるプロジェクトが増やせますね!!
命を燃やせ!
Discussion