最完整ni使用指南:从安装到精通的一站式教程
【免费下载链接】ni 💡 Use the right package manager 项目地址: https://gitcode.com/gh_mirrors/ni/ni
你是否还在多个项目间切换时,因为忘记当前使用的包管理器而输入错误的命令?比如在Yarn项目中运行npm install,结果不仅浪费时间,还可能导致依赖冲突。ni工具彻底解决了这个痛点,它能自动检测项目使用的包管理器,并执行正确的命令。读完本教程,你将掌握ni的安装方法、核心命令使用技巧、高级配置以及常见问题解决方法,让包管理变得前所未有的简单高效。
什么是ni
ni是一款智能包管理器工具,全称是"use the right package manager",它能够自动检测当前项目所使用的包管理器(如npm、yarn、pnpm、bun或deno),并将统一的ni命令转换为对应包管理器的原生命令执行。这意味着你只需记住一套ni命令,就能在任何项目中顺畅工作,无需再担心记错包管理器的特定语法。项目源码位于src/目录,核心功能实现可查看src/index.ts。
安装ni
npm全局安装
最直接的安装方式是使用npm进行全局安装:
npm i -g @antfu/ni
Homebrew安装(macOS)
如果你使用macOS系统,推荐通过Homebrew安装,更加方便管理和更新:
brew install ni
asdf安装
如果你使用asdf版本管理器,也可以通过社区维护的插件安装ni:
# 添加插件
asdf plugin add ni https://gitcode.com/CanRau/asdf-ni.git
# 安装最新版本
asdf install ni latest
# 设置为全局可用
asdf global ni latest
核心命令详解
ni - 安装依赖
ni命令用于安装项目依赖,根据项目类型自动转换为对应包管理器的安装命令。
基本用法:
ni
# 等同于npm install、yarn install、pnpm install等
安装特定依赖:
ni vite
# 等同于npm install vite、yarn add vite、pnpm add vite等
安装开发依赖:
ni @types/node -D
# 等同于npm install @types/node --save-dev、yarn add @types/node --dev等
生产环境安装(不含开发依赖):
ni -P
# 等同于npm install --production、yarn install --production等
锁定版本安装:
ni --frozen
# 等同于npm ci、yarn install --frozen-lockfile等
全局安装:
ni -g eslint
# 等同于npm install -g eslint、yarn global add eslint等
交互式安装:
ni -i
# 交互式选择要安装的依赖包
ni命令的实现逻辑主要在src/commands/ni.ts文件中,它会调用src/detect.ts模块检测当前项目的包管理器类型。
nr - 运行脚本
nr命令用于运行package.json中定义的脚本,简化了不同包管理器的脚本执行方式。
基本用法:
nr dev --port=3000
# 等同于npm run dev -- --port=3000、yarn run dev --port=3000等
交互式选择脚本:
nr
# 列出所有可用脚本,交互式选择要运行的脚本
在monorepo项目中选择包和脚本:
nr -p
nr -p dev
# 交互式选择要运行脚本的包和具体脚本
重新运行上一条命令:
nr -
# 快速重新运行上一次执行的nr命令
nr命令的实现代码位于src/commands/nr.ts,它会解析项目中的脚本定义并执行相应命令。
nlx - 下载并执行
nlx命令用于临时下载并执行npm包中的可执行文件,类似于npx或yarn dlx。
基本用法:
nlx vitest
# 等同于npx vitest、yarn dlx vitest、pnpm dlx vitest等
nlx命令的实现可以查看src/commands/nlx.ts文件。
nup - 升级依赖
nup命令用于升级项目依赖,根据不同包管理器执行相应的升级命令。
基本用法:
nup
# 等同于npm upgrade、yarn upgrade、pnpm update等
交互式升级:
nup -i
# 交互式选择要升级的依赖包(部分包管理器支持)
nup命令的源代码在src/commands/nup.ts中。
nun - 卸载依赖
nun命令用于卸载项目依赖,统一了不同包管理器的卸载语法。
基本用法:
nun webpack
# 等同于npm uninstall webpack、yarn remove webpack、pnpm remove webpack等
交互式卸载:
nun
# 交互式选择要卸载的依赖包
批量交互式卸载:
nun -m
# 交互式选择多个要卸载的依赖包
全局卸载:
nun -g silent
# 等同于npm uninstall -g silent、yarn global remove silent等
nun命令的实现位于src/commands/nun.ts文件。
其他实用命令
nci - 干净安装
nci命令用于干净安装依赖,通常用于CI环境或需要全新安装依赖的场景:
nci
# 等同于npm ci、yarn install --frozen-lockfile等
实现代码见src/commands/nci.ts。
nd - 依赖去重
nd命令用于 deduplicate 依赖,减少依赖树中的重复包:
nd
# 等同于npm dedupe、yarn dedupe、pnpm dedupe等
源代码位于src/commands/nd.ts。
na - 包管理器别名
na命令作为当前项目包管理器的别名,可以直接执行对应包管理器的命令:
na
# 输出当前检测到的包管理器名称
na run foo
# 等同于npm run foo、yarn run foo、pnpm run foo等
全局标志
ni提供了一些全局标志,可以与任何命令配合使用:
# 查看将要执行的原生命令
ni vite ?
# 切换目录后执行命令
ni -C packages/foo vite
nr -C playground dev
# 显示版本号
ni -v
# 显示帮助信息
ni -h
这些全局标志的处理逻辑在src/parse.ts中实现。
配置ni
ni支持通过配置文件和环境变量进行个性化设置,以适应不同的使用习惯和项目需求。
配置文件
可以在用户主目录下创建.nirc配置文件,设置ni的默认行为:
; ~/.nirc
; 当未检测到锁文件时的默认包管理器
defaultAgent=npm # 默认值为"prompt",会提示用户选择
; 全局安装时使用的包管理器
globalAgent=npm
; 使用node --run代替包管理器的run命令(需要Node.js 22+)
runAgent=node
; 给命令添加sfw前缀
useSfw=true
配置文件的处理逻辑在src/config.ts中实现。
环境变量
也可以通过环境变量来配置ni,环境变量的优先级高于配置文件:
# ~/.bashrc
# 自定义配置文件路径
export NI_CONFIG_FILE="$HOME/.config/ni/nirc"
# 设置默认包管理器
export NI_DEFAULT_AGENT="npm"
# 设置全局安装使用的包管理器
export NI_GLOBAL_AGENT="npm"
# 启用sfw前缀
export NI_USE_SFW="true"
Windows系统下的PowerShell配置:
# 自定义配置文件路径
$Env:NI_CONFIG_FILE = 'C:\to\your\config\location'
高级使用技巧
命令补全
ni支持命令补全功能,可以为bash或zsh配置自动补全:
# 为bash添加补全脚本
nr --completion-bash >> ~/.bashrc
# 为zsh添加补全脚本(以zim为例)
mkdir -p ~/.zim/custom/ni-completions
nr --completion-zsh > ~/.zim/custom/ni-completions/_ni
echo "zmodule $HOME/.zim/custom/ni-completions --fpath ." >> ~/.zimrc
zimfw install
补全功能的实现代码在src/completion.ts中。
在monorepo项目中使用
ni对monorepo项目有良好支持,可以通过-C参数指定子包目录,或使用-p参数交互式选择:
# 安装子包依赖
ni -C packages/foo
# 运行子包脚本
nr -C packages/foo build
# 交互式选择子包和脚本
nr -p
monorepo相关功能在src/monorepo.ts中实现。
处理PowerShell冲突
Windows PowerShell默认有一个ni别名指向New-Item cmdlet,会与ni工具冲突。可以通过以下命令移除该别名:
Remove-Item Alias:ni -Force -ErrorAction Ignore
若要永久生效,可将上述命令添加到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
}
命令别名
ni的部分命令曾用名可能与其他工具冲突,已进行重命名,你可以根据习惯设置别名:
# 将nlx别名回nx或nix
alias nx="nlx"
alias nix="nlx"
# 将nup别名回nu
alias nu="nup"
工作原理
ni的核心工作原理是通过检测项目中的锁文件(如yarn.lock、pnpm-lock.yaml、package-lock.json等)或package.json中的packageManager字段,确定当前项目使用的包管理器,然后将ni命令转换为对应包管理器的原生命令执行。
检测逻辑由src/detect.ts模块实现,它会按优先级检查各种锁文件和配置,最终确定使用的包管理器。命令映射关系定义在src/runner.ts中,根据检测结果选择对应的命令执行。
总结
ni工具通过统一命令接口,解决了多项目多包管理器带来的命令混乱问题,极大提升了开发效率。从基本的依赖安装、脚本运行,到高级的配置自定义、monorepo支持,ni都提供了简洁一致的操作方式。无论你是前端开发者还是全栈工程师,掌握ni都将使你的日常开发工作更加顺畅高效。
现在就安装ni,体验智能包管理带来的便利吧!如果你在使用过程中遇到问题,可以查阅项目的测试用例test/获取更多使用场景示例,或查看项目文档README.md获取最新信息。
【免费下载链接】ni 💡 Use the right package manager 项目地址: https://gitcode.com/gh_mirrors/ni/ni
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



