zsh: 命令未找到:gulp

24

我使用Homebrew安装了zsh,并将其更改为我的shell。当尝试运行gulp命令时,出现了问题,而在更改shell为zsh之前,该命令是可以正常运行的。

zsh: command not found: gulp

经过一些研究,我认为这与我的PATH有关。我的PATH在.zshrc文件中如下所示。

export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

我想说我是用brew安装的node。如何在zsh中使用gulp而不必切换回默认shell呢?

感谢任何帮助。提前致谢!


1
好的,gulp二进制文件在哪里?请在旧的shell中尝试运行whereis gulp命令,并查看该路径是否在您的PATH变量中。 - Siguza
1
whereis gulp 没有返回任何内容。但是 which gulp 返回了这个:/Users/realph/.node/bin/gulp - realph
1
然后将$HOME/.node/bin添加到您的路径中。 - Siguza
@Siguza 把它加入到.zshrc文件中? - realph
1
@Abdennour的回答提供了一个简单的解决方案:在zsh中npm安装后找不到命令 - sandraqu
9个回答

34

我执行了 sudo npm install gulp -g 命令, 输入了我的密码,在安装完成后,它对我有用。


1
在MacOS Catalina上,我做了一些调整,这个方法对我有效。使用原始命令会出现错误gyp WARN EACCES current user ("nobody") does not have permission to access the dev dir "/Users/my_user/Library/Caches/node-gyp"。但是,在项目中本地运行该命令可以正常工作,并且我能够使用gulp - Jonathan Kibet
@JonathanKibet 我也遇到了这个错误。你能在这里分享一下命令吗?谢谢。 - Qadir Hussain
@QadirHussain 命令就在您正在评论的答案上。 sudo npm install gulp -g - Jonathan Kibet
1
这个答案中的命令实际上存在问题。你提到了一些调整,那些调整是什么? - Qadir Hussain

14
尽管这是一篇旧文章,但以上解决方案都对我没有用(Catalina 10.15.3)。所以基本上我的问题不在于安装gulp而是链接不正确。
我运行的命令是: 1. npm config set prefix /usr/local 2. npm link gulp 希望这能帮助任何人。

1
我使用相同的Mac OS版本,这个答案解决了我的问题,非常感谢。 - JqueryToAddNumbers
1
我猜测如果你删除了执行npm link的文件夹,gulp将无法工作。如果是这样,我不建议使用此修复方法,因为它是一种不好的修复方式。 - Matiss

10
通常情况下,没有必要直接在~/.zshrc中将PATH设置为字面上的值,这样做可能是个坏主意,因为你可能会删除之前添加到PATH中的一些目录。
针对您的情况,由于它可以在另一个shell中工作,所以我建议首先尝试删除设置PATH的那一行,因为zsh应该会从其父环境中继承PATH变量。
如果这样做无法添加包含gulp的路径(可能是因为它已经添加到旧shell的配置中),那么您可以添加:
PATH=$HOME/.node/bin:$PATH

将内容添加到您的~/.zshrc文件中。

注意:由于PATH已经是环境的一部分,因此无需再次导出。


通常,如果您想将某些内容添加到PATH中,可以使用以下命令:

PATH="/something/new/bin:$PATH"

这会将/something/new/bin添加到PATH的最前面。

如果您真的想从PATH中删除某些内容,可以使用以下命令:

PATH=${${PATH//\/something\/old\/bin/}//::/:}

这将从 PATH 中删除任何出现的 /something/old/bin(需要转义斜杠),然后删除重复的冒号。


这很有道理。谢谢!我还有一个问题,为什么在zsh中运行gulp会出现问题?我得到了这个错误:events.js:72 throw er; // Unhandled 'error' event - realph
1
抱歉,我无法在这方面为您提供帮助。不管怎样,最好还是另开一个问题来询问。 - Adaephon

4
$HOME/.node/bin添加到您的环境变量中,在您的.zshrc文件中添加此行:
export PATH="$HOME/.node/bin:$PATH"

谢谢!这很好用。只是为了明确,那行代码是将我的节点文件夹添加到$PATH变量中吗? - realph
是的。特别是,在开始时,这样您节点文件夹中的任何二进制文件都会覆盖命令行中系统文件夹中的二进制文件。 - Siguza

3

sudo npm link gulp 并输入密码解决了我的问题。


如果您删除了执行npm link的项目,我认为gulp将停止工作。这意味着每次您遇到此问题时,都必须搜索此修复程序,因此我不建议使用此修复程序。 - Matiss

1
打开 .zshrs 文件并添加以下内容:
export PATH="$PATH:$HOME/.rvm/bin"
PATH=$PATH:/usr/local/bin
npm set prefix ~/.npm
PATH="$HOME/.npm/bin:$PATH"
PATH="./node_modules/.bin:$PATH"

1

当您在项目文件夹中安装gulp时,要使用gulp,它需要从已安装的路径运行,因此在安装gulp时需要提供路径。在上面的答案之一中已经说明了如何设置安装gulp时的路径。为了解决这个问题,还有另一种处理方法。您可以全局安装gulp,这将在系统的任何位置都可访问,您只需执行以下命令即可:

npm i --global gulp

这里的 --global 是一个参数,用于全局安装该软件包。

i 代表安装。


1
我知道这是一个旧问题,但最近我遇到了这个问题,并且有一个不同的原因导致了这个错误。
至少对于我来说,我继承了一个使用Gulp 3.9.1的遗留项目,而我在我的机器上使用的是Node 12.x。
在这种情况下,我需要切换到Node 10.0.0,删除package-lock.json和node_modules,然后重新安装节点包并运行gulp。
步骤:
  • 删除 package-lock.json 和 node_modules 文件夹

  • 安装 NVM (管理 node 版本):

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash

  • 使用 NVM:

    export NVM_DIR="$HOME/.nvm"

    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # 加载 nvm

    [ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # 加载 nvm bash_completion

  • 安装 node 10.0.0 (适用于 Gulp 3.9.1):

    nvm install 10.0.0

  • 使用 node.js 10.0.0

    nvm use 10.0.0

  • 在我的情况下,重新构建 node-sass:

    npm rebuild node-sass

  • 然后,你可以使用 gulp:

    gulp

希望这能帮助到某个人。

-1
作为工具的一部分:VivaGraphJS,我这样做了,它起作用了: node_modules/.bin/gulp release 然后得到:
[09:56:05] Using gulpfile ~/KynKon/Sandbox/VivaGraphJS/gulpfile.js
[09:56:05] Starting 'clean'...
[09:56:05] Starting 'build'...
[09:56:06] Finished 'build' after 923 ms
[09:56:06] Finished 'clean' after 1.03 s
[09:56:06] Starting 'release'...
[09:56:06] Finished 'release' after 59 ms
$ npm test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接