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 包。