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

10

我在本地使用root用户使用NVM进行了npm/node的新安装,一切看起来都很好,但是当我尝试在我的项目文件夹中使用npm install --unsafe-perm -verbose命令时,终端显示错误。

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 NODE版本 - 10.1

非常感谢您的帮助。谢谢!

4个回答

22
将你的node_modules文件夹所有权交给自己,不要使用sudo运行。你应该始终拥有.npm目录的所有权,因为NPM会拒绝使用sudo安装本地模块,这可能会造成安全风险。尝试使用"sudo chown -R $(whoami) ~/.npm"命令,看看是否有效(如果使用nvm,则使用"sudo chown -R $(whoami) ~/.nvm")。或者按照文档中推荐的方法,使用一个节点版本管理器在没有root权限的情况下重新安装。重新安装文档
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

这个问题与Docker无关(它们在本地机器上)。这不适用于你的情况,@Rumen Rumenov。也许这个链接会有所帮助:https://stackoverflow.com/a/54543874/5037430如果您找不到您要寻找的问题,请随时提出另一个问题,我们很乐意帮助您。 - u-ways

9
在您的用户空间中创建一个新的全局存储是防止此错误的推荐方法。不要使用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作为运行全局命令的替代方法,特别是如果您只需要偶尔使用命令。有关更多信息,请参见这篇关于npx的文章

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


如果我运行这些命令,就会出现以下错误:nvm 与 npm 配置中的 "prefix" 选项不兼容:当前设置为 "/home/denver/.npm-global" 运行 npm config delete prefixnvm use --delete-prefix v10.24.1 --silent 来取消设置。 - Denver

1

@U-ways的答案非常好,但对于使用nvm而不是其他工具的人来说:

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

do

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

这对我有效。

1

这对我有效

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

1
请不要发表“谢谢”的回答。多花点时间在网站上,您就会有足够的声望投票支持您认为有帮助的帖子,这是 Stack Overflow 表达“感谢”的方式。 - Ian Campbell

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