以超级用户身份运行npm,这不是一个好主意吗?

我试图在Linux上没有SU权限的情况下安装/更新软件包时遇到npm错误。

解决这个问题的简单方法是执行sudo npm install <package> ,但我不知道这是不是一个好主意。

最好的办法是成为.npm文件夹的所有者,因为我发现了StackOverflow的问题和博客文章。

我的问题是:为什么像SU一样运行npm这不是一个好主意?

以超级用户的身份运行npm可能会导致一些不可信的代码作为超级用户运行,从而可能导致整个系统的混乱。 以非特权用户的身份运行npm可能会以较低的权限运行该代码,并且无法混淆整个系统 – 只需使用自己的文件(根据查看的方式,这可能同样很糟糕) 。

我经常做的和build议的是将Node安装在您的主目录中,而不是在系统上全局安装,如果它是您自己的计算机的话。 这样你就不必使用sudo或者sunpm ,甚至不需要make install Node本身。

我运行了很多版本的Node,我有时使用不同的交换机从源代码编译,我使用的约定是将Node安装在版本化的目录中,全局地在/opt (但是接下来需要sudo )或者在本地目录中~/opt

我这样做:

 wget https://nodejs.org/dist/v7.1.0/node-v7.1.0.tar.gz tar xzvf node-v7.1.0.tar.gz cd node-v7.1.0 ./configure --prefix=$HOME/opt/node-v7.1.0 make && make test && make install 

然后我创build一个~/opt/node指向~/opt/node-v7.1.0的符号链接,我有:

 PATH="$HOME/opt/node/bin:$PATH" 

在我的.profile.bashrc

这样我就不必以超级用户身份运行安装Node或运行npm。

作为奖励,我可以通过更改符号链接来快速切换默认节点版本,并且在任何时候我可以运行任何其他版本,如果我改变PATH或运行节点像一个完整的path,如~/opt/node-v7.0.0/bin/node

我在其他答案中更详细地解释了安装过程:

  • 节点5.5.0已经安装,但节点-v在OS X和自制软件上获取“v4.2.1”?
  • 具有其他语言的外部代码的NodeJS API

我不想在这里详细介绍,因为这个答案是关于为什么以超级用户身份运行npm不是一个好主意 – 这个安装过程只是一个解决scheme,不需要以超级用户身份运行npm

其他选项设置您的npm权限,以避免以超级用户身份运行,在npm docs中修复npm权限 (感谢RyanZim在注释中指出)。