npm自定义node_modules路径

目标:

  • 告别 sudo npm install -g + 各种 EACCES 权限报错
  • 全局 npm 包(如 hexo-cli)安装到你自己的目录
  • 所有命令(hexonpmpnpm 等)能在终端直接用
  • 不污染系统 /usr/lib/node_modules/
先搞清楚几个概念:全局安装 vs 项目安装
  • 项目安装(推荐,大部分情况用这个)

    1
    2
    npm install package-name      # 安装到当前项目的 node_modules
    ./node_modules/.bin/xxx # 对应命令
    • 默认安装路径:当前项目目录/node_modules
    • 不需要 sudo,和当前项目绑定
  • 全局安装(-g,全局命令用)

    1
    npm install -g hexo-cli
    • 在 Linux 上默认装到:/usr/lib/node_modules/(或类似路径)
    • 普通用户没权限写 -> 经典 EACCES 错误

一、永久自定义全局安装目录(最推荐)

~/.npm-global 为例,这个方案适合:
常年写代码 / 常用 CLI 工具 / 想要一劳永逸 的情况

1、创建一个属于你的全局目录
1
mkdir -p ~/.npm-global
2、告诉 npm:以后全局包都装到这里
1
npm config set prefix '~/.npm-global'

‘~/.npm-global’ 输出:/home/你的用户名/.npm-global

你可以用下面命令查看当前前缀:

1
npm config get prefix
3、把全局命令目录加到 PATH 里

全局命令会被放在:

1
~/.npm-global/bin

要让 hexovuevitepnpm 这些命令能直接在终端里用,
需要把这个路径加入 PATH

Bash(大概率你用的是这个)

编辑 ~/.bashrc

1
vim ~/.bashrc

在文件末尾加一行(如果已有类似 PATH 配置,可以合并):

1
export PATH="$HOME/.npm-global/bin:$PATH"

保存后加载配置:

1
source ~/.bashrc

如果你用的是 zsh(echo $SHELL 看一下)

编辑 ~/.zshrc

1
vim ~/.zshrc

同样加:

1
export PATH="$HOME/.npm-global/bin:$PATH"

保存后:

1
source ~/.zshrc
4、现在安装 hexo-cli(示例)
1
npm install -g hexo-cli

不会再写 /usr/lib/node_modules,而是写到:

1
~/.npm-global/lib/node_modules/hexo-cli

命令在:

1
~/.npm-global/bin/hexo
5、验证
1
2
3
npm config get prefix
hexo -v # 能输出版本说明成功
which hexo # 应该指向 ~/.npm-global/bin/hexo

二、项目本地安装 + npx(完全不需要 -g)

对于很多 CLI 工具,其实不必全局安装,可以在项目目录内安装:

1
cd	#进入项目目录

[!NOTE]

示例:express

1
npm install express --save-dev	# 一条命令即可
  • 安装路径:项目目录/node_modules/express
  • 不会污染全局,不会有权限问题
  • 做多个项目时,每个项目可以用不同版本的包

npm自定义node_modules路径
https://huishao.net/2025/11/13/npm自定义node_modules路径/
作者
huishao
发布于
2025年11月13日
许可协议