使用 root 用户的 NPM 安装权限被拒绝错误

Posted

技术标签:

【中文标题】使用 root 用户的 NPM 安装权限被拒绝错误【英文标题】:NPM install permission denied error using root user 【发布时间】:2019-01-26 03:25:21 【问题描述】:

所以我已经使用 root 用户使用 NVM 在我的本地机器上重新安装了 npm/node,一切看起来都很好,现在我的问题是当我尝试使用 npm install --unsafe-perm 安装时 -我的项目文件夹错误上的详细命令显示在我的终端中。

npm verb stack Error: Command failed: /usr/bin/git clone --depth=1 -q -b 0.0.7 https://github.com/Mango/emitter.git /root/.npm/_cacache/tmp/git-clone-28a98ad9
npm verb stack fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-28a98ad9': Permission denied
npm verb stack 
npm verb stack     at ChildProcess.exithandler (child_process.js:282:12)
npm verb stack     at ChildProcess.emit (events.js:182:13)
npm verb stack     at maybeClose (internal/child_process.js:957:16)
npm verb stack     at Socket.stream.socket.on (internal/child_process.js:378:11)
npm verb stack     at Socket.emit (events.js:182:13)
npm verb stack     at Pipe._handle.close [as _onclose] (net.js:598:12)
npm verb cwd /web/nbltv
npm verb Linux 4.15.0-29-generic
npm verb argv "/root/.nvm/versions/node/v10.1.0/bin/node" "/root/.nvm/versions/node/v10.1.0/bin/npm" "install" "--unsafe-per" "-verbose"
npm verb node v10.1.0
npm verb npm  v5.6.0
npm ERR! code 128
npm ERR! Command failed: /usr/bin/git clone --depth=1 -q -b 0.0.7 https://github.com/Mango/emitter.git /root/.npm/_cacache/tmp/git-clone-28a98ad9
npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-28a98ad9': Permission denied
npm ERR! 
npm verb exit [ 1, true ]

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-08-20T01_36_33_496Z-debug.log

NPM 版本 - 5.6 节点版本 - 10.1

任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

Chown 关闭你的 node_modules 并且不要以 sudo 身份运行。

您应该始终拥有 .npm 目录的所有权,因为 NPM 将拒绝使用 sudo 安装本机模块,因为这可能存在安全风险。

试试sudo chown -R $(whoami) ~/.npm 看看是否可行。

或reinstall with a node version manager 没有根目录,如docs 中所推荐的:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

【讨论】:

【参考方案2】:

在您的用户空间中创建一个新的全局存储是防止此错误的推荐方法。不要使用 sudo 或更改位置的所有权。

$ mkdir ~/.npm-global
$ npm config set prefix '~/.npm-global'
$ export PATH=~/.npm-global/bin:$PATH
$ source ~/.profile

但是,由于您使用的是 npm 5.6,因此这可能与您更相关:

npx:运行全局命令的替代方法

如果您使用的是 npm 5.2 或更高版本,您可能需要考虑将 npx 作为运行全局命令的替代方式,尤其是在您只是偶尔需要命令的情况下。如需更多信息,请参阅this article about npx。

来源:https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

【讨论】:

如果我运行这些命令,我​​会收到此错误:nvm 与 npm config "prefix" 选项不兼容:当前设置为 "/home/denver/.npm-global" 运行 npm config delete prefixnvm use --delete-prefix v10.24.1 --silent 取消设置。【参考方案3】:

@U-ways 答案很好,但对于使用 nvm 的人来说 而不是:

sudo chown -R $(whoami) ~/.npm

sudo chown -R $(whoami) ~/.nvm

这对我有用

【讨论】:

【参考方案4】:

这对我有用

sudo chown -R $(whoami) ~/.npm

【讨论】:

请不要张贴回答说“谢谢”。多花点时间在网站上,你就会有足够的 reputation 到 upvote the posts 你觉得有帮助,这就是 Stack Overflow 的说法 "thanks."

以上是关于使用 root 用户的 NPM 安装权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

npm 包无法安装“npm ERR!错误:EACCES:权限被拒绝”

错误:EACCES:权限被拒绝,mkdir '/.npm'

用户'root'@'localhost'的访问被拒绝(使用密码:是) - 没有权限?

使用非root用户时,Docker节点权限被拒绝

NPM/Cordova 权限错误:EACCES:权限被拒绝,scandir

升级 npm,npm ERR!错误:EACCES:权限被拒绝