node 安装后,npm install 报错 `Error: EACCES: permission denied`

1,721 阅读1分钟

问题描述

  1. node 官网下载 node 后,执行:
node -v   // v18.12.1
npm -v    // 8.19.2
  1. 执行 npm install -g npx,报错如下:(无权限)
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules/npx
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/npx'
npm ERR!  [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/npx'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/usr/local/lib/node_modules/npx'
npm ERR! }
  1. 执行 npm install -g npm,同样报错:
npm ERR! code EACCES
npm ERR! syscall rename
npm ERR! path /usr/local/lib/node_modules/npm
npm ERR! dest /usr/local/lib/node_modules/.npm-i9nnxROI
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'
npm ERR!  [Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'rename',
npm ERR!   path: '/usr/local/lib/node_modules/npm',
npm ERR!   dest: '/usr/local/lib/node_modules/.npm-i9nnxROI'
npm ERR! }

解决方案

sudo chown -R `whoami` /usr/local/lib/node_modules

知识点:

  1. chown 是修改文件的所有者(owner),和所属组(group)。详见 Linux chown 命令

解释:

sudo chown -R $USER <directory>

给 $USER 增加 directory 及 directory 子目录的权限。

  1. Shell 变量的表示方法 详见shell 变量
`whoami` 或者 $(whoami)
echo `whoami`    // cassie
echo $(whoami)   // cassie