npm 配置
修改全局路径
背景
在 Linux 中,如果通过 apt 安装 Node.js,同时使用 npm 安装一些全局的 CLI 工具,例如:
npm install -g <package>
npm 默认会将全局包安装到 /usr/local 等系统级目录。
例如:
apt
└── /usr/...
└── 系统软件
npm
└── /usr/local/...
└── 用户安装的 Node.js 全局包
这种情况下,npm 全局安装的包位于系统目录中,后续管理时需要考虑权限问题,也容易和其他手动安装的软件混在一起。
因此,可以将 npm 的全局安装路径修改到当前用户的目录中,使其与系统软件相互隔离,将系统软件和用户自行安装的软件分开管理会是更加合理的做法。
修改方法
首先查看当前 npm 的全局安装路径:
npm config get prefix
例如:
/usr/local
npm 通过 prefix 配置项决定全局包的安装位置,因此修改该配置即可。
这里将全局路径设置为:
~/.local/share/npm
执行:
mkdir -p ~/.local/share/npm
npm config set prefix "$HOME/.local/share/npm"
再次查看:
npm config get prefix
如果输出类似:
/home/<username>/.local/share/npm
则说明修改成功。
配置 PATH
npm 全局安装的可执行文件会位于:
~/.local/share/npm/bin
因此需要将该目录加入 PATH。
如果使用 Bash,可以在 ~/.bashrc 中添加:
export PATH="$HOME/.local/share/npm/bin:$PATH"
然后重新加载配置:
source ~/.bashrc
也可以直接执行:
echo 'export PATH="$HOME/.local/share/npm/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
验证
此时可以重新安装一个全局 npm 包进行测试:
npm install -g <package>
然后检查其可执行文件的位置:
which <command>
如果返回类似:
/home/<username>/.local/share/npm/bin/<command>
则说明 npm 全局包已经安装到了用户目录。
最终的目录结构大致如下:
系统软件
├── /usr/bin
├── /usr/lib
└── /usr/share
↑
apt
用户级 npm 软件
└── ~/.local/share/npm
├── bin
└── lib
└── node_modules
↑
npm
这样可以将 apt 管理的系统软件和 npm 管理的用户级 Node.js 软件分离开来,同时也不再需要通过 sudo npm install -g 安装全局 npm 包。