ni
在 yarn 项目中又用了 npm i
?糟糕!
ni - 使用正确的包管理器
npm i -g @antfu/ni
ni
- 安装
ni
# npm install
# yarn install
# pnpm install
# bun install
ni vite
# npm i vite
# yarn add vite
# pnpm add vite
# bun add vite
ni @types/node -D
# npm i @types/node -D
# yarn add @types/node -D
# pnpm add -D @types/node
# bun add -d @types/node
ni --frozen
# npm ci
# yarn install --frozen-lockfile (Yarn 1)
# yarn install --immutable (Yarn Berry)
# pnpm install --frozen-lockfile
# bun install --frozen-lockfile
ni -g eslint
# npm i -g eslint
# yarn global add eslint (Yarn 1)
# pnpm add -g eslint
# bun add -g eslint
# 这将使用默认代理,无论你当前的工作目录是什么
ni -i
# 交互式选择要安装的依赖
# 按名称搜索包
nr
- 运行
nr dev --port=3000
# npm run dev -- --port=3000
# yarn run dev --port=3000
# pnpm run dev --port=3000
# bun run dev --port=3000
nr
# 交互式选择要运行的脚本
# 支持 https://www.npmjs.com/package/npm-scripts-info 约定
nr -
# 重新运行上一个命令
nlx
- 下载并执行
nlx vitest
# npx vitest
# yarn dlx vitest
# pnpm dlx vitest
# bunx vitest
nu
- 升级
nu
# npm upgrade
# yarn upgrade (Yarn 1)
# yarn up (Yarn Berry)
# pnpm update
# bun update
nu -i
# (npm 和 bun 不可用)
# yarn upgrade-interactive (Yarn 1)
# yarn up -i (Yarn Berry)
# pnpm update -i
nun
- 卸载
nun webpack
# npm uninstall webpack
# yarn remove webpack
# pnpm remove webpack
# bun remove webpack
nun
# 交互式选择
# 要删除的依赖
nun -m
# 交互式选择,
# 但可以选择多个依赖
nun -g silent
# npm uninstall -g silent
# yarn global remove silent
# pnpm remove -g silent
# bun remove -g silent
nci
- 清洁安装
nci
# npm ci
# yarn install --frozen-lockfile
# pnpm install --frozen-lockfile
# bun install --frozen-lockfile
如果相应的节点管理器不存在,此命令将顺便全局安装它。
na
- 代理别名
na
# npm
# yarn
# pnpm
# bun
na run foo
# npm run foo
# yarn run foo
# pnpm run foo
# bun run foo
全局标志
# ? | 打印根据代理执行的命令
ni vite ?
# -C | 在运行命令前更改目录
ni -C packages/foo vite
nr -C playground dev
# -v, --version | 显示版本号
ni -v
# -h, --help | 显示帮助信息
ni -h
配置
; ~/.nirc
; 当没有找到锁文件时的回退选项
defaultAgent=npm # 默认为 "prompt"
; 用于全局安装
globalAgent=npm
# ~/.bashrc
# 自定义配置文件路径
export NI_CONFIG_FILE="$HOME/.config/ni/nirc"
# 如果存在,环境变量的优先级高于配置文件
export NI_DEFAULT_AGENT="npm" # 默认为 "prompt"
export NI_GLOBAL_AGENT="npm"
# 适用于 Windows
# 在 PowerShell 中自定义配置文件路径,可在 `$profile` 路径中访问
$Env:NI_CONFIG_FILE = 'C:\to\your\config\location'
集成
asdf
你也可以通过 CanRau 维护的 第三方 asdf 插件 安装 ni
# 首先添加插件
asdf plugin add ni https://github.com/CanRau/asdf-ni.git
# 然后安装最新版本
asdf install ni latest
# 最后使其全局可用
asdf global ni latest
原理
ni 假定你使用锁文件(你应该这么做)
在运行之前,它会检测你的 yarn.lock
/ pnpm-lock.yaml
/ package-lock.json
/ bun.lockb
来确定当前的包管理器(或者如果指定了,则使用 packages.json 中的 packageManager
字段),然后运行相应的命令。
故障排除
与 PowerShell 冲突
PowerShell 自带一个名为 ni
的内置别名,用于 New-Item
cmdlet。要在当前 PowerShell 会话中删除此别名以支持本包,请使用以下命令:
'Remove-Item Alias:ni -Force -ErrorAction Ignore'
如果你想保持更改,可以将它们添加到你的 PowerShell 配置文件中。配置文件路径可在 $profile
变量中访问。ps1 配置文件通常可以在以下位置找到:
- 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
你可以使用以下脚本在 shell 启动时删除别名,方法是将上述命令添加到你的配置文件中:
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
和 nix
不再可用
我们将 nx
/nix
重命名为 nlx
,以避免与其他现有工具 - nx 和 nix 发生冲突。你可以随时在 shell 配置文件(.zshrc
、.bashrc
等)中为它们添加别名。
alias nx="nlx"
# 或
alias nix="nlx"