我遇到 npm
错误尝试在 Linux 上安装/更新没有 SU 权限的软件包时。
解决问题的简单方法是执行 sudo npm install <package>
,但我不确定这是否是一个好主意。
最好的方法是成为 .npm
的所有者文件夹,正如我在 StackOverflow 的问题和博客文章中发现的那样。
我的问题是:为什么运行 npm
作为 SU 这不是一个好主意吗?
最佳答案
以 super 用户身份运行 npm
存在以 super 用户身份运行某些不受信任的代码的风险,这可能会扰乱您的整个系统。以非特权用户身份运行 npm
存在以较低权限运行该代码的风险,并且它无法扰乱整个系统 - 只能扰乱您自己的文件(这可能同样糟糕,具体取决于您如何看待它)。
我经常做并建议的是将 Node 安装在您的主目录中,而不是在系统上全局安装(如果它是您自己的计算机)。这样,您就不必为 npm
甚至 Node 本身的 make install
运行 sudo
或 su
。
我运行了很多版本的 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
然后我创建一个指向 ~/opt/node-v7.1.0
的符号链接(symbolic link) ~/opt/node
,我有:
PATH="$HOME/opt/node/bin:$PATH"
在我的.profile
或.bashrc
中。
这样我就不必以 super 用户身份运行来安装 Node 或运行 npm。
作为奖励,我只需更改符号链接(symbolic link)即可快速切换默认 Node 版本,并且如果更改 PATH 或使用像 ~/opt/node-v7.0.0/bin/node
这样的完整路径运行 Node,我可以随时运行任何其他版本。
我在其他答案中更详细地解释了安装过程:
- node 5.5.0 already installed but node -v fetches with “v4.2.1” on OS X & homebrew?
- NodeJS API with external deps in other language
我不想在这里讨论太多细节,因为这个答案是关于为什么以 super 用户身份运行 npm
不是一个好主意 - 这个安装过程只是不必以 super 用户身份运行 npm
的一种解决方案。
设置 npm 权限以避免以 super 用户身份运行的其他选项在 Fixing npm permissions 中进行了描述。在 npm 文档中(感谢 RyanZim 在评论中指出)。
关于node.js - 以 super 用户身份运行 npm,这不是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525238/