最完整ni使用指南:从安装到精通的一站式教程

最完整ni使用指南:从安装到精通的一站式教程

【免费下载链接】ni 💡 Use the right package manager 【免费下载链接】ni 项目地址: 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等

实现见src/commands/na.ts

全局标志

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 【免费下载链接】ni 项目地址: https://gitcode.com/gh_mirrors/ni/ni

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值