我正在尝试升级到最新版本的节点。我在http://davidwalsh.name/upgrade-nodejs上按照说明操作

但当我这样做的时候:

sudo npm install -g n

我得到了错误:

sudo: npm: command not found

NPM没有sudo也能工作。当我这样做的时候:

whereis node

我明白了:

node: /usr/bin/node /usr/lib/node /usr/bin/X11/node /usr/local/node

运行:

which npm

显示:

/usr/local/node/bin/npm

我在https://stackoverflow.com/a/5062718/1246159上尝试了解决方案

但还是得到相同的错误。我还查看了/etc/sudoers文件,相关行是:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

在我看来这很好。我怎么可能得到NPM工作与sudo命令?


当前回答

你可以通过为npm和node创建符号链接来解决这个问题,这是快速而简单的:

sudo ln -s $(which npm) /usr/local/bin/npm
sudo ln -s $(which node) /usr/local/bin/node

我使用which来获取位置,然后将其作为变量传递给命令,例如$(npm)。

我也为node创建了一个符号链接,因为npm依赖于 节点。

然后你就可以:

sudo npm -v

不需要重新安装节点或在整个目录上使用chmod。

其他回答

我也有同样的问题;下面是修复它的命令:

Sudo ln -s /usr/local/bin/node /usr/bin/node Sudo ln -s /usr/local/lib/node /usr/lib/node Sudo ln -s /usr/local/bin/npm /usr/bin/npm Sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf

对于CentOS用户,这适用于我:

sudo yum install npm

完全移除节点:

  brew uninstall --force node

安装:

brew install node;
which node # => /usr/local/bin/node
export NODE_PATH='/usr/local/lib/node_modules'

如果你用nvm安装node/npm,在使用任何一个包之前都必须运行nvm环境配置文件。

这通常在~/.nvm/nvm.sh中找到。

要自动运行,包括:

source ~/.nvm/nvm.sh

在您的用户的.bash_profile文件中

如果希望对该用户使用sudo,请确保包含-i参数以使sudo设置用户环境。如

sudo -iu jenkins npm install grunt-cli

对我来说,上面提到的任何使用Homebrew的方法在macOS上都不起作用。因此,我使用Homebrew卸载了node,并从https://nodejs.org/en/download/下载了node包并安装了它。这招很管用。