错误:EACCES:权限被拒绝,访问'/usr/lib/node_modules'。

107
我试图使用命令npm install -g typescript安装TypeScript,但它返回了以下错误:
    npm ERR! Error: EACCES: permission denied, access '/usr/lib/node_modules'
    npm ERR!     at Error (native)
    npm ERR!  { Error: EACCES: permission denied, access '/usr/lib/node_modules'
    npm ERR!     at Error (native)
    npm ERR!   errno: -13,
    npm ERR!   code: 'EACCES',
    npm ERR!   syscall: 'access',
    npm ERR!   path: '/usr/lib/node_modules' }
    npm ERR! 
    npm ERR! Please try running this command again as root/Administrator.
    npm ERR! Linux 4.4.0-93-generic
    npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "typescript"
    npm ERR! node v6.11.2
    npm ERR! npm  v3.10.10
    npm ERR! path npm-debug.log.1024969454
    npm ERR! code EACCES
    npm ERR! errno -13
    npm ERR! syscall open
    
    npm ERR! Error: EACCES: permission denied, open 'npm-debug.log.1024969454'
    npm ERR!     at Error (native)
    npm ERR!  { Error: EACCES: permission denied, open 'npm-debug.log.1024969454'
    npm ERR!     at Error (native)
    npm ERR!   errno: -13,
    npm ERR!   code: 'EACCES',
    npm ERR!   syscall: 'open',
    npm ERR!   path: 'npm-debug.log.1024969454' }
    npm ERR! 
    npm ERR! Please try running this command again as root/Administrator.
    
    npm ERR! Please include the following file with any support request:
    npm ERR!     /npm-debug.log
    jramirez@jramirez:/$ ^C
    jramirez@jramirez:/$ npm install typescript
    npm WARN checkPermissions Missing write access to /
    /
    └── typescript@2.5.2 
    
    npm WARN enoent ENOENT: no such file or directory, open '/package.json'
    npm WARN !invalid#1 No description
    npm WARN !invalid#1 No repository field.
    npm WARN !invalid#1 No README data
    npm WARN !invalid#1 No license field.
    npm ERR! Linux 4.4.0-93-generic
    npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "typescript"
    npm ERR! node v6.11.2
    npm ERR! npm  v3.10.10
    npm ERR! path /
    npm ERR! code EACCES
    npm ERR! errno -13
    npm ERR! syscall access
    
    npm ERR! Error: EACCES: permission denied, access '/'
    npm ERR!     at Error (native)
    npm ERR!  { Error: EACCES: permission denied, access '/'
    npm ERR!     at Error (native) errno: -13, code: 'EACCES', syscall: 'access', path: '/' }
    npm ERR! 
    npm ERR! Please try running this command again as root/Administrator.
    npm ERR! Linux 4.4.0-93-generic
    npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "typescript"
    npm ERR! node v6.11.2
    npm ERR! npm  v3.10.10
    npm ERR! path npm-debug.log.2387664261
    npm ERR! code EACCES
    npm ERR! errno -13
    npm ERR! syscall open
    
    npm ERR! Error: EACCES: permission denied, open 'npm-debug.log.2387664261'
    npm ERR!     at Error (native)
    npm ERR!  { Error: EACCES: permission denied, open 'npm-debug.log.2387664261'
    npm ERR!     at Error (native)
    npm ERR!   errno: -13,
    npm ERR!   code: 'EACCES',
    npm ERR!   syscall: 'open',
    npm ERR!   path: 'npm-debug.log.2387664261' }
    npm ERR! 
    npm ERR! Please try running this command again as root/Administrator.
    
    npm ERR! Please include the following file with any support request:
    npm ERR!     /npm-debug.log

此外,我运行了 npm install typescript(不带 -g),但它无效。是否存在其他安装 TypeScript 的方式?我的操作系统是 Linux Ubuntu 16.04。我很少使用 node 并且不知道如何解决这个问题。
我的问题是:确切地说,哪些目录需要该权限?

6
尝试使用 sudo npm install -g typescript 进行安装。 - Juan
8个回答

345
不建议使用sudo与npm install命令,应该按照npmjs官方文档中的步骤进行操作

创建一个用于全局安装的目录:

mkdir ~/.npm-global

配置npm使用新的目录路径:
npm config set prefix '~/.npm-global'

打开或创建一个~/.profile文件,并添加以下一行内容:
export PATH=~/.npm-global/bin:$PATH

回到命令行,更新您的系统变量:
source ~/.profile

测试:在不使用sudo的情况下全局下载一个软件包。
npm install -g typescript

来源:https://docs.npmjs.com/getting-started/fixing-npm-permissions

6
第三步export PATH="~/.npm-global/bin:$PATH"不应该放在.bash_aliases中(可以从.bashrc包含或直接放置),以便持久保存吗? - Frank N
3
如果您正在使用Z shell(Zsh),则请将“export PATH=/.npm-global/bin:$PATH”添加到您的“/.zshrc”文件中,然后执行“source ~/.zshrc”命令以使其生效。 - Hom Bahrani
只是一个提醒,有些人可能已经安装了TypeScript(或其他全局包),他们只是升级到了Catalina。你不需要重新安装这些包,只需通过运行所有步骤来配置zsh,但要将源设置为.zprofile - BrewMate
为什么创建一个新目录解决了问题,这不是权限问题吗? - user204069
我的 Linux 服务器上使用 NVM 不起作用。我已经运行了 npm config set prefix /home/myfolder/.nvm/versions/node/v16.18.1/bin/npm 等命令,但还是不起作用。有什么想法吗? - bandungeuy
显示剩余2条评论

19

在 Ubuntu 安装全局包时,您需要特殊的写入权限,因为您正在写入 usr/bin 文件夹。这是为安全原因。

因此,每次安装全局包时,请使用:

sudo npm install -g [package-name]

对于您的特定情况:

sudo npm install -g typescript

如果没有使用 -g,则您所做的只是在您所在的任何文件夹中本地安装包:

因此:npm install typescript 将在您所在的文件夹中创建一个 node_modules 文件夹。


1
/usr/lib/node_modules/上使用chmod g+rw会非常错误吗? - Frank N
28
不应在NPM安装时使用sudo。 - Abdalla Arbab
sudo 不应该与 NPM 一起使用的概念是错误的,并且不符合在由 UNIX 文件系统层次结构标准 指定的位置安装全局二进制文件的范例。 - wheeler

9

我也曾遇到webpack服务器全局安装问题,以下步骤解决了我的问题,或许对你有用。

以上提到的步骤如下:在开始之前备份您的计算机。

创建一个全局安装目录:

1. mkdir ~/.npm-global

配置npm使用新的目录路径:

2. npm config set prefix '~/.npm-global'

打开或创建~/.profile文件,并添加以下行:

3. export PATH=~/.npm-global/bin:$PATH

回到命令行,更新您的系统变量:

4. source ~/.profile

测试:全局下载包而无需使用sudo。

npm install -g jshint

除了步骤2-4之外,您还可以使用相应的ENV变量(例如,如果不想修改~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global


3

我不是很确定这是否是解决此问题的正确方法,但我希望这可以帮助那些已经尝试了以下操作的人:

  • 应用了npm网站上的建议
  • 检查了node_modules文件夹的正确权限,并没有发现任何问题
  • 使用了sudo npm install <package>(无论是否带有-g),但没有得到预期结果(我不推荐这种解决方案)

当我注意到在尝试使用npm安装axios包时,包含整个项目的目录在Visual Studio Code中打开时,这个问题的解决方案就显而易见了。所以我关闭了它,然后再次尝试安装。 令人惊讶的是,安装成功了。

为了尝试复制同样的问题,我在WSL上使用了Ubuntu 18.04 LTS(也许这与Windows权限有关)。

这也可能是这个问题的解决方案: 错误:EACCES:权限被拒绝,访问'/usr/local/lib/node_modules' react

1

1) 进入目录“/usr/local/lib/node_modules

2) 点击文件夹并右键获取信息

3) 点击右下角的锁

4) 输入您的Windows密码以解锁

5) 检查WheelEveryone的值是否为Read & Write

6) 返回终端并尝试再次安装Typescript


“wheel” 是一个 BSD/RedHat 的东西,在基于 Debian 的系统,比如 Ubuntu 中不存在。https://unix.stackexchange.com/questions/4460/why-is-debian-not-creating-the-wheel-group-by-default - Novaterata

1

0

已经安装了nvm,但仍然收到EACESS拒绝的消息。有什么想法吗? - bandungeuy

-3

这对我有用。

sudo npm install -g coffee-script

那么

sudo npm install -g typescript

5
尽量避免使用“sudo npm install”,因为这可能会对安全造成危害。请按照npmjs官方文档提供的步骤操作。https://docs.npmjs.com/getting-started/fixing-npm-permissions - Mihai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接