# nci rewrited using Rust with [antfu-collective/ni](https://github.com/antfu-collective/ni) # credits - [antfu-collective/ni](https://github.com/antfu-collective/ni) - [zhazhazhu/ni](https://github.com/zhazhazhu/ni) # install ```bash cargo install nci ```
# ni ~~*`npm i` in a yarn project, again? F\*\*k!*~~ **ni** - use the right package manager
``` npm i -g @antfu/ni ``` npm · yarn · pnpm · bun
### `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](https://github.com/CanRau/asdf-ni.git) maintained by [CanRau](https://github.com/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](https://github.com/antfu/ni/blob/main/src/agents.ts). ### 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](https://nx.dev/) and [nix](https://nixos.org/). You can always alias them back on your shell configuration file (`.zshrc`, `.bashrc`, etc). ```bash alias nx="nlx" # or alias nix="nlx" ```