🍎

ni で開発を1mm楽に

に公開

はじめに

こちらのポストをタイムラインで見つけて、実際にniを使用してみました。
https://x.com/catnose99/status/1994953874432823632/photo/1

niとは

niはnpm / yarn / pnpm / bunを自動判別してくれる便利コマンドです。
例えばniと入力するとnpm iやyarn iなどに変換してくれるってことらしい。

ni

# npm install
# yarn install
# pnpm install
# bun install
# deno install

どのパッケージマネージャーを使っているか意識しなくていいのが利点です。
https://github.com/antfu-collective/ni

どうやって判別してるの?

How?
ni assumes that you work with lock-files (and you should).
Before ni runs the command, it detects your yarn.lock / pnpm-lock.yaml / package-lock.json / bun.lock / bun.lockb / deno.json / deno.jsonc to know the current package manager (or packageManager field in your packages.json if specified) using the package-manager-detector package and then runs the corresponding package-manager-detector command.

githubにこう書かれていますが、要はロックファイル(yarn.lock, package-lock.jsonなど)の有無で判別してるみたいです。

コードを見てみましたが、denoはそのまま書いてましたが、他はpackage-manager-detectorという外部ライブラリを使ってるみたいです。

src/detect.ts
import { detect as detectPM } from 'package-manager-detector'
...
  // Check for deno.json or deno.jsonc before using package-manager-detector
  if (existsSync(path.join(targetDir, 'deno.json')) || existsSync(path.join(targetDir, 'deno.jsonc'))) {
    // Return early with deno agent if deno.json/deno.jsonc is present
    return 'deno'
  }

  const {
    name,
    agent,
    version,
  } = await detectPM({
    cwd,
    onUnknown: (packageManager) => {
      if (!programmatic) {
        console.warn('[ni] Unknown packageManager:', packageManager)
      }
      return undefined
    },
  }) || {}
  ...

どんなコマンドがある?

ni - install
nr - run
nlx - download & execute
nup - upgrade
nun - uninstall
nci - clean install
nd - dedupe dependencies
na - agent alias

よく分からなかったら、naでyarnやnpmに変換されるので、na installやna run devなどnaを固定で使うでもいいかなーと思いました。

使ってみた

インストール

npm i -g @antfu/ni

ni と nr devを打ってみて、どちらも正常に動いてそうでした!

シンプルに入力文字数が減るのもいい副作用だと思いました。

NCDC テックブログ

Discussion