ni
Use the right package manager
README
ni
npm i in a yarn project, again? F\\k!
ni - use the right package manager
- ```
- npm i -g @antfu/ni
- ```
ni - install
- ```bash
- ni
- # npm install
- # yarn install
- # pnpm install
- # bun install
- ```
- ```bash
- ni vite
- # npm i vite
- # yarn add vite
- # pnpm add vite
- # bun add vite
- ```
- ```bash
- ni @types/node -D
- # npm i @types/node -D
- # yarn add @types/node -D
- # pnpm add -D @types/node
- # bun add -d @types/node
- ```
- ```bash
- ni --frozen
- # npm ci
- # yarn install --frozen-lockfile (Yarn 1)
- # yarn install --immutable (Yarn Berry)
- # pnpm install --frozen-lockfile
- # bun install --no-save
- ```
- ```bash
- ni -g eslint
- # npm i -g eslint
- # yarn global add eslint (Yarn 1)
- # pnpm add -g eslint
- # bun add -g eslint
- # this uses default agent, regardless your current working directory
- ```
nr - run
- ```bash
- nr dev --port=3000
- # npm run dev -- --port=3000
- # yarn run dev --port=3000
- # pnpm run dev --port=3000
- # bun run dev --port=3000
- ```
- ```bash
- nr
- # interactively select the script to run
- # supports https://www.npmjs.com/package/npm-scripts-info convention
- ```
- ```bash
- nr -
- # rerun the last command
- ```
nlx - download & execute
- ```bash
- nlx vitest
- # npx vitest
- # yarn dlx vitest
- # pnpm dlx vitest
- # bunx vitest
- ```
nu - upgrade
- ```bash
- nu
- # npm upgrade
- # yarn upgrade (Yarn 1)
- # yarn up (Yarn Berry)
- # pnpm update
- # bun update
- ```
- ```bash
- nu -i
- # (not available for npm & bun)
- # yarn upgrade-interactive (Yarn 1)
- # yarn up -i (Yarn Berry)
- # pnpm update -i
- ```
nun - uninstall
- ```bash
- nun webpack
- # npm uninstall webpack
- # yarn remove webpack
- # pnpm remove webpack
- # bun remove webpack
- ```
- ```bash
- nun -g silent
- # npm uninstall -g silent
- # yarn global remove silent
- # pnpm remove -g silent
- # bun remove -g silent
- ```
nci - clean install
- ```bash
- nci
- # npm ci
- # yarn install --frozen-lockfile
- # pnpm install --frozen-lockfile
- # bun install --no-save
- ```
if the corresponding node manager is not present, this command will install it globally along the way.
na - agent alias
- ```bash
- na
- # npm
- # yarn
- # pnpm
- # bun
- ```
- ```bash
- na run foo
- # npm run foo
- # yarn run foo
- # pnpm run foo
- # bun run foo
- ```
Global Flags
- ```bash
- # ? | Print the command execution depends on the agent
- ni vite ?
- # -C | Change directory before running the command
- ni -C packages/foo vite
- nr -C playground dev
- # -v, --version | Show version number
- ni -v
- # -h, --help | Show help
- ni -h
- ```
Config
- ```ini
- ; ~/.nirc
- ; fallback when no lock found
- defaultAgent=npm # default "prompt"
- ; for global installs
- globalAgent=npm
- ```
- ```bash
- # ~/.bashrc
- # custom configuration file path
- export NI_CONFIG_FILE="$HOME/.config/ni/nirc"
- ```
- ```ps
- # for Windows
- # custom configuration file path in PowerShell accessible within the `$profile` path
- $Env:NI_CONFIG_FILE = 'C:\to\your\config\location'
- ```
Integrations
asdf
You can also install ni via the 3rd-party asdf-plugin maintained by CanRau
- ```bash
- # first add the plugin
- asdf plugin add ni https://github.com/CanRau/asdf-ni.git
- # then install the latest version
- asdf install ni latest
- # and make it globally available
- asdf global ni latest
- ```
How?
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.
Trouble shooting
Conflicts with PowerShell
PowerShell comes with a built-in alias ni for the New-Item cmdlet. To remove the alias in your current PowerShell session in favor of this package, use the following command:
- ```PowerShell
- 'Remove-Item Alias:ni -Force -ErrorAction Ignore'
- ```
If you want to persist the changes, you can add them to your PowerShell profile. The profile path is accessible within the $profile variable. The ps1 profile file can normally be found at
- PowerShell 5 (Windows PowerShell): C:\Users\USERNAME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- PowerShell 7: C:\Users\USERNAME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
- VSCode: C:\Users\USERNAME\Documents\PowerShell\Microsoft.VSCode_profile.ps1
You can use the following script to remove the alias at shell start by adding the above command to your profile:
- ```PowerShell
- if (-not (Test-Path $profile)) {
- New-Item -ItemType File -Path (Split-Path $profile) -Force -Name (Split-Path $profile -Leaf)
- }
- $profileEntry = 'Remove-Item Alias:ni -Force -ErrorAction Ignore'
- $profileContent = Get-Content $profile
- if ($profileContent -notcontains $profileEntry) {
- ("`n" + $profileEntry) | Out-File $profile -Append -Force -Encoding UTF8
- }
- ```
nx and nix is no longer available
We renamed nx/nix to nlx to avoid conflicts with the other existing tools - nx and nix. You can always alias them back on your shell configuration file (.zshrc, .bashrc, etc).
- ```bash
- alias nx="nlx"
- # or
- alias nix="nlx"
- ```