sh:1:节点:权限被拒绝

时间:2018-08-12 18:12:07

标签: node.js npm

试图在ubuntu 18.04上运行此命令

npm install -g pngquant-bin

但是我遇到了这个错误,

[..................] | fetchMetadata: sill resolveWithNewModule npm-conf@1.1.3 checking installable status
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
/root/.nvm/versions/node/v10.8.0/bin/pngquant -> /root/.nvm/versions/node/v10.8.0/lib/node_modules/pngquant-bin/cli.js

> pngquant-bin@5.0.0 postinstall /root/.nvm/versions/node/v10.8.0/lib/node_modules/pngquant-bin
> node lib/install.js

sh: 1: node: Permission denied
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! pngquant-bin@5.0.0 postinstall: `node lib/install.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the pngquant-bin@5.0.0 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

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

您知道如何处理吗? 我尝试了在此articles中找到的所有解决方案,但没有成功。

7 个答案:

答案 0 :(得分:16)

遇到相同的错误@Test(//throws some exception) public void shouldThrowSomeException() { Processor exThreadmock = mock(Processor.class); when(exThreadmock.sendRequest(anyObject)) .thenThrow(SomeException.class) Thread t = new Thread(exThread); t.start() }

这对我有用

sh: 1: node: Permission denied

答案 1 :(得分:3)

事实上,npm 不能使用 root 帐户安装任何东西。如果您使用 root 帐户,npm 将创建一个未经许可的帐户进行安装。在这种情况下,如果包需要执行 writeFile 或其他需要权限的操作,则会引发错误 node: Permission denied

所以,你可以在下面任意选择:

  • npm install xxx --unsafe-perm
  • npm config set unsafe-perm true
  • 创建专用于执行npm install的高权限帐户

答案 2 :(得分:2)

我让项目用户所有者使用chown(在USERID中)目录,并解决“权限被拒绝”问题:

sudo chown -R USERID.USERID *

答案 3 :(得分:1)

原始消息中的/root/.npm/...日志路径显示您已经以root用户身份运行,并且(尽管其他人建议)我想这很可能是引起问题。

我作为根节点运行Node的经验(有限)是,大多数npm install运行都花了很长的时间,但是由于显示的错误有所不同,因此失败了。我找到的唯一可靠的解决方案是在Ubuntu上完全不以root身份运行Node或npm。只需使用普通用户帐户下载并解压缩Node安装即可。

对于我来说,至少有一个以root用户身份运行的问题是因为某个依赖项npm install脚本正在调用setuid切换到特权较低的用户。由于某种原因,它选择了UID 500(Ubuntu不存在),因此失去了所有特权。因此,“权限被拒绝”错误是因为我以root用户身份运行; setuid对普通用户不起作用。

我相信这与Error: setuid user id does not exist npm ERR! when npm install forever -g有关。

答案 4 :(得分:0)

您需要root用户权限,只需在命令前添加sudo关键字并输入密码

sudo npm install -g pngquant-bin

答案 5 :(得分:0)

尝试在项目文件夹中安装节点

npm install node

答案 6 :(得分:-1)

此外(这可能对docker很有用),您可以通过环境变量npm_config_user全局覆盖此配置设置-例如:

ENV npm_config_user=root