node.js - 以 super 用户身份运行 npm,这不是一个好主意吗?

标签 node.js npm

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

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

最好的方法是成为 .npm 的所有者文件夹,正如我在 StackOverflow 的问题和博客文章中发现的那样。

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

最佳答案

以 super 用户身份运行 npm 存在以 super 用户身份运行某些不受信任的代码的风险,这可能会扰乱您的整个系统。以非特权用户身份运行 npm 存在以较低权限运行该代码的风险,并且它无法扰乱整个系统 - 只能扰乱您自己的文件(这可能同样糟糕,具体取决于您如何看待它)。

我经常做并建议的是将 Node 安装在您的主目录中,而不是在系统上全局安装(如果它是您自己的计算机)。这样,您就不必为 npm 甚至 Node 本身的 make install 运行 sudosu

我运行了很多版本的 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,我可以随时运行任何其他版本。

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

我不想在这里讨论太多细节,因为这个答案是关于为什么以 super 用户身份运行 npm 不是一个好主意 - 这个安装过程只是不必以 super 用户身份运行 npm 的一种解决方案。

设置 npm 权限以避免以 super 用户身份运行的其他选项在 Fixing npm permissions 中进行了描述。在 npm 文档中(感谢 RyanZim 在评论中指出)。

关于node.js - 以 super 用户身份运行 npm,这不是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525238/

相关文章:

node.js - 应用程序日志 heroku 应用程序崩溃

javascript - Nodejs Express - methodOverride 不适用于多部分/表单数据

javascript - 如何读取Azure函数HTTP请求的参数并使用blob存储中的文件进行响应?

javascript - 如何提取通过 multipart/form-data 发送的文件的内容类型

javascript - React CRA - 图像生态系统

node.js - 无法在Windows上npm安装react-native

javascript - 如何从另一个 .js 文件添加 Express 路由端点?

node.js - 如何在 Node js 中获取系统代理设置

npm - 从package.json仅安装一个软件包?

node.js - 在 Ubuntu 20.04.2 LTS 上安装 node-gyp 重建失败