sudo:npm:找不到命令

Posted

技术标签:

【中文标题】sudo:npm:找不到命令【英文标题】:sudo: npm: command not found 【发布时间】:2015-10-06 23:50:58 【问题描述】:

我正在尝试升级到最新版本的节点。我正在按照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://***.com/a/5062718/1246159尝试了解决方案

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

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

这对我来说很好。我怎样才能让 NPM 使用 sudo 命令?

【问题讨论】:

这行得通吗? sudo /usr/bin/npm install -g n 您可以尝试重新安装节点吗?听起来你删除了 npm。 您可能已将/usr/local/node/bin 添加到您的$PATH,但npm 应安装在/usr/local/bin 中。第一个目录不在secure_path 中,这就解释了为什么sudo 找不到它。 在这里在 Ubuntu 上使用 nvm - 带有 @robertklep 评论,我尝试了 sudo /home/$user/.nvm/version/node/$version/bin/npm install 并且成功了。 它通过从以下软件包重新安装解决了我的问题。 nodejs.org/en/download 【参考方案1】:

我不得不这样做

sudo apt-get install npm

这对我有用。

【讨论】:

很难理解你想表达什么。 这已经过时了。对我有用的是我在这里找到的这些命令:github.com/nodesource/distributions#debinstall # Using Ubuntu curl -sL deb.nodesource.com/setup_5.x | sudo -E bash - sudo apt-get install -y nodejs # 使用 Debian,作为 root curl -sL deb.nodesource.com/setup_5.x | bash - apt-get install -y nodejs @tinysunlight 我不确定有什么不清楚的地方。操作员说缺少 npm 命令。此命令安装 npm 命令。 这不是问题的正确答案,因为从操作中可以明显看出 npm 已经安装但通过 sudo 调用时无法访问。使用此解决方案,您可以重新安装已经存在的 npm。这是对抗症状,而不是寻找原因。我知道这可能会纠正某些人的错误,但这样站着会产生误导。 当我在 Ubuntu 18.10 上使用 NVM 安装节点时,sudo 无法将 npm 识别为命令。 sudo apt-get install npm 为我工作。【参考方案2】:

npm 文件应该在/usr/local/bin/npm 中。如果它不存在,请使用其website 上的包再次安装 node.js。这在我的情况下有效。

【讨论】:

谢谢。如果将node安装在其他没有安装os的数据盘,找不到这个路径。 在 mac os 和 homebrew 的情况下.. 两个步骤是 (1) 哪个节点 (2) 哪个 npm 应该都在 /usr/local/bin (homebrew 安装/符号链接 node+npm)... 解决.. 尝试 (1) brew doctor (2) brew reinstall node 如果它仍然存在问题.. 检查您的路径 (echo $PATH)。你必须有多个 bin 位置指向不同的节点安装..如果是这样的话......清理(如使其更整洁)你的 ~/.bashrc / ~/.bash_profile,所以 /usr/local/bin 就在那里加载时没有另一个指向随机节点安装。 这是部分解决方案。手动安装节点时会出现此问题。您必须将每个已安装的二进制文件软链接到 /usr/bin 或 /usr/local/bin。在 root 的 bashrc 中设置路径将不起作用,因为在 sudo 期间不会读取它,因此这是唯一的方法,除非您安装包。 正如@shrimpwagon 所说,手册说明的底部告诉您链接“sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/node /usr/ bin/node sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm /usr/bin/npm sudo ln -s /usr/local/lib/nodejs/node-$VERSION -$DISTRO/bin/npx /usr/bin/npx" 我为什么要使用他们的网站?【参考方案3】:

对于 MAC 用户,以下步骤对我有用。

如果您收到 Brew 错误,这是您需要首先在终端中键入的命令:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
然后运行以下命令:
$ brew update
$ brew uninstall node
$ brew install node
$ brew postinstall 

【讨论】:

brew uninstall node 对我不起作用,但我继续使用brew install nodebrew postinstall 并解决了问题。谢谢 brew postinstall 到底是做什么的? 在 Homebrew 版本 2.2.14 brew postinstall 是多余的 就我而言,brew install node 无法覆盖旧版本的符号链接。我必须运行 brew link --overwrite node 来解决问题。【参考方案4】:

我遇到了同样的问题;以下是修复它的命令:

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 7 上为我工作 为我工作 Ubuntu 16.04.1 LTS。我使用 NVM,所以第一个路径是 NVM 安装节点和 npm 的位置(路径包括版本%HOME%/.nvm/versions/node/v7.4.0/bin/npm)。不幸的是,由于路径中的版本将如何变化,我每次使用 NVM 更新时都必须参考这个答案 这也为我解决了!最初发布在 Stack Overflow:On EC2: sudo node command not found, but node without sudo is ok @kas sudo ln -s $(whereis node) /usr/bin/node 等等。在你的 bash 个人资料中。 在 AWS ec2 实例中为我工作。【参考方案5】:

** 编辑 **

警告! - 执行chmod 777 是一个相当激进的解决方案。首先尝试这些,一次一个,当一个工作时停止:

$ sudo chmod -R 777 /usr/local/lib/node_modules/npm $ sudo chmod -R 777 /usr/local/lib/node_modules $ sudo chmod g+w /usr/local/lib $ sudo chmod g+rwx /usr/local/lib

$ brew postinstall node 是我会遇到问题的唯一安装部分

Permission denied - /usr/local/lib/node_modules/npm/.github

所以我

// !! READ EDIT ABOVE BEFORE RUNNING THIS CODE !!
$ sudo chmod -R 777 /usr/local/lib
$ brew postinstall node

和 viola,npm 现已关联

$ npm -v
3.10.10

额外

如果您在 lib 上使用 -R 777,我的建议是将嵌套文件和目录设置为默认设置:

$find /usr/local/lib -type f -print -exec chmod 644 \; $find /usr/local/lib -type d -print -exec chmod 755 \; $chmod /usr/local/lib 755

【讨论】:

@Jacksonkr .....你刚刚推荐 chmoding 777 整个 local/lib 文件夹吗? 这个目录应该是什么chmod @tim_xyz drwxr-xr-x 是 lib 的默认值。也就是说,在设置文件夹时不要使用递归功能-R 谢谢! sudo chmod -R 777 /usr/local/lib/node_modules 为我工作 永远不要chmod 777,除非你有充分的理由这样做。【参考方案6】:

我必须做到以下几点:

    brew update brew uninstall node 访问https://nodejs.org/en/下载文件 安装下载的文件

【讨论】:

你是英雄。【参考方案7】:

为了使用 sudo 权限全局安装 npm 包,/usr/bin/npm 应该可用。如果npm 存在于其他目录中,则创建一个软链接,如:

sudo ln -s /usr/local/bin/npm /usr/bin/npm

它适用于 Fedora 25、node8.0.0 和 npm5.0.0

【讨论】:

简单有效,在 linux mint 20 上为我工作。 这应该是最好的答案!谢谢老兄,它对我有用【参考方案8】:

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

sudo yum install npm

【讨论】:

这种方法的问题是,例如在 Fedora 中,它在 dnf / yum repos 中已经过时了 在 CentOS 7 上,您需要先启用 EPEL repo:yum install epel-release; yum install npm【参考方案9】:

在 macOS 上,这对我有用:

brew reinstall node

【讨论】:

抱歉,刚刚注意到该问题标有unix,但它可能仍然有用,因为它是“找不到macos npm 命令”的***Google 搜索结果【参考方案10】:

如果您使用 nvm 安装 node/npm,则必须先运行 nvm 环境配置文件,然后才能使用任一包。

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

要自动运行,包括:

source ~/.nvm/nvm.sh

在您用户的 .bash_profile 文件中

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

sudo -iu jenkins npm install grunt-cli

【讨论】:

【参考方案11】:

您可以为我制作符号链接及其作品。

    找到当前npm的路径

which npm

    按照以下命令建立符号链接

sudo ln -s which/npm /usr/local/bin/npm

    测试和验证。

sudo npm -v

【讨论】:

最简单的解决方案,对我来说很完美,只需要对节点做同样的事情 @dipenparmar12 我也试过了,但现在我得到 /usr/bin/env:'node': Not a directory【参考方案12】:

安装node后的debian 进入

curl -k -O -L https://npmjs.org/install.sh    
ln -s /usr/bin/nodejs /usr/bin/node  
sh install.sh

【讨论】:

【参考方案13】:

只需重新安装。

在 RHEL、CentOS 和 Fedora 上

sudo yum remove nodejs npm
sudo dnf remove nodejs npm   [On Fedora 22+ versions]

然后

yum -y install nodejs npm
dnf -y install nodejs npm   [On Fedora 22+ versions]

简单!.. node 和 npm 现在都像魅力一样工作!

【讨论】:

【参考方案14】:

如果你已经下载了节点包并解压到了/opt 这样的地方,你可以简单地在/usr/local/bin 中创建符号链接。

/usr/local/bin/npm -> /opt/node-v4.6.0-linux-x64/bin/npm
/usr/local/bin/node -> /opt/node-v4.6.0-linux-x64/bin/node

【讨论】:

【参考方案15】:

为我工作Resolving EACCES permissions errors when installing packages globally

为了最大程度地减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,您将在主目录中创建和使用隐藏目录。

备份您的计算机。 在命令行的主目录中,为全局安装创建一个目录:

 mkdir ~/.npm-global

配置 npm 以使用新的目录路径:

 npm config set prefix '~/.npm-global'

在您喜欢的文本编辑器中,打开或创建一个 ~/.profile 文件并添加以下行:

 export PATH=~/.npm-global/bin:$PATH

在命令行上,更新你的系统变量:

 source ~/.profile

要测试您的新配置,请在不使用 sudo 的情况下全局安装软件包:

 npm install -g jshint

【讨论】:

【参考方案16】:

我遇到了同样的问题,原因是安装节点时没有安装 npm 包管理器。这是由于以下错误引起的: 在安装过程中有一个称为“自定义设置”的步骤,您可以在此处选择以下选项之一: 1) Node.js 运行时(默认选中)。 2) npm 包管理器 3) 在线文档快捷方式。 4)添加到路径。 如果您按原样继续,则不会安装 npm 包管理器,因此您将收到错误消息。

解决方案: 获得这些选项时选择 npm 包管理器。 这对我有用。

【讨论】:

【参考方案17】:

使用 visudo 将 npm 二进制路径附加到 sudo 路径并编辑“secure_path”

现在“sudo npm”可以工作了

【讨论】:

【参考方案18】:

我解决了这个问题

apt-get install npm2deb

【讨论】:

这个答案是什么? npm2deb 是第 3 方 它并不完全“受信任”,因为在第 3 方中比直接从源代码中的 npm 更有可能受到损害。我对 npm2deb 一无所知,但想想如果你想在你的公司使用它,他们可能会严格审核它【参考方案19】:

我在 Homestead 也遇到了同样的问题,并尝试了很多方法。 我试过了

sudo apt-get install nodejs

我收到以下错误:

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
       Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
       Depends: node-ansi (>= 0.3.0-2) but it is not going to be installed
       Depends: node-ansi-color-table but it is not going to be installed
       Depends: node-archy but it is not going to be installed
       Depends: node-block-stream but it is not going to be installed
       Depends: node-fstream (>= 0.1.22) but it is not going to be installed
       Depends: node-fstream-ignore but it is not going to be installed
       Depends: node-github-url-from-git but it is not going to be installed
       Depends: node-glob (>= 3.1.21) but it is not going to be installed
       Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
       Depends: node-inherits but it is not going to be installed
       Depends: node-ini (>= 1.1.0) but it is not going to be installed
       Depends: node-lockfile but it is not going to be installed
       Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
       Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
       Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
       Depends: node-gyp (>= 0.10.9) but it is not going to be installed
       Depends: node-nopt (>= 3.0.1) but it is not going to be installed
       Depends: node-npmlog but it is not going to be installed
       Depends: node-once but it is not going to be installed
       Depends: node-osenv but it is not going to be installed
       Depends: node-read but it is not going to be installed
       Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
       Depends: node-request (>= 2.25.0) but it is not going to be installed
       Depends: node-retry but it is not going to be installed
       Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
       Depends: node-semver (>= 2.1.0) but it is not going to be installed
       Depends: node-sha but it is not going to be installed
       Depends: node-slide but it is not going to be installed
       Depends: node-tar (>= 0.1.18) but it is not going to be installed
       Depends: node-underscore but it is not going to be installed
       Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

最后我尝试了

sudo apt-get dist-upgrade

效果很好。

root@homestead:/usr/local/bin# npm -v
3.10.10

root@homestead:/usr/local/bin# node -v
v6.13.0

【讨论】:

【参考方案20】:

我的解决方案是:

sudo -E env "PATH=$PATH" n stable

对我来说很好。

在这里找到它:https://***.com/a/29400598/861615

这是因为您更改了默认的全局包目录

【讨论】:

【参考方案21】:

而不是再次安装节点,这似乎是公认的解决方案,问题是没有对 nodejs 文件夹/usr/local 的权限。 输入以下命令sudo chmod -R 777 /usr/local/nodejs/

【讨论】:

【参考方案22】:

完全删除节点:

  brew uninstall --force node

再次安装:

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

【讨论】:

【参考方案23】:

如果对使用 rh-* 包的任何人有用,这对我有用:

sudo ln -s /opt/rh/rh-nodejs8/root/usr/bin/npm /usr/local/bin/npm

【讨论】:

【参考方案24】:

由于我已经使用 node.js 上的 .tar 文件安装了 node.js, 我不得不把节点目录的位置放在:

~/.bashrc

使用命令从普通用户更改为root用户:

sudo -i

然后我必须将路径添加到我将其提取到 .bashrc 文件中的节点,如下所示:

然后使用 .bashrc 引用

。 ~/.bashrc

之后
npm: command not found

走了

【讨论】:

【参考方案25】:

对我来说,上面提到的任何使用 Homebrew 的方法都不适用于 macOS。因此,我使用 Homebrew 卸载了节点并从 https://nodejs.org/en/download/ 下载了节点包并安装了它。它就像一个魅力。

【讨论】:

【参考方案26】:

安装 node.js 并运行

npm install -g bower 

来自您的项目目录

【讨论】:

以上是关于sudo:npm:找不到命令的主要内容,如果未能解决你的问题,请参考以下文章

Ec2 sudo 运行 npm或node时,出现找不到命令

sudo npm 找不到命令

sudo xx 找不到命令

在 sudo 上找不到命令

Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令

sudo:端口:找不到命令