即使安装了npm install -g gulp,仍然找不到本地的gulp安装。

88

我尝试通过

npm install gulp

来安装gulp。

npm install -g gulp

输出似乎是这样的。 (我跳过了一些日志)

npm http 304 https://registry.npmjs.org/string_decoder
npm http 304 https://registry.npmjs.org/lodash._htmlescapes
/usr/bin/gulp -> /usr/lib/node_modules/gulp/bin/gulp.js
gulp@3.6.2 /usr/lib/node_modules/gulp
├── tildify@0.2.0
├── pretty-hrtime@0.2.1
├── deprecated@0.0.1
├── archy@0.0.2
├── semver@2.2.1
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── orchestrator@0.3.3 (sequencify@0.0.7)
├── liftoff@0.9.8 (extend@1.2.1, minimist@0.0.8, resolve@0.6.3, findup-sync@0.1.3)
├── vinyl-fs@0.1.4 (graceful-fs@2.0.3, map-stream@0.1.0, mkdirp@0.3.5, vinyl@0.2.3, glob-stream@3.1.9, glob-watcher@0.0.6)
└── gulp-util@2.2.14 (lodash._reinterpolate@2.4.1, dateformat@1.0.7-1.2.3, minimist@0.0.8, vinyl@0.2.3, multipipe@0.0.2, through2@0.4.1, lodash.template@2.4.1)
在上面的脚本中,我看到了一行/usr/bin/gulp -> /usr/lib/node_modules/gulp/bin/gulp.js,我猜这是在bin文件夹中创建了一个符号链接。所以我应该全局获取gulp,但我却得到了这个错误。
No local gulp install found in /var/www/ksapp

有任何想法为什么我会得到这个错误。

谢谢

4个回答

104

如文档所指出的那样,你应该全局安装它(你已经这样做了)并且将其添加到你的项目开发依赖项(本地)中:

npm install gulp --save-dev

1
有没有可能让 Gulp 不将 node 文件复制到项目本地文件夹中?安装了全局的 Gulp 后,我理解这个命令会将其作为本地副本。 - Vladislav Rastrusny
重点是本地安装可以保证您的项目构建不会中断,即使您的系统安装进行了升级(全局gulp安装只是为了在路径中提供二进制命令)。这也适用于grunt。 - Mangled Deutz
12
我也不喜欢在每个项目文件夹中完全复制 Node 模块,所以我经常使用 npm link gulp --save-dev - PA.
1
不错,但我没有看到 npm link gulp --save-dev 命令会遵循 --save-dev 参数。 - Derek Greer
2
@PA,再次强调其他答案中的评论,“npm link gulp”是一个不好的主意。 - sfarbota
显示剩余2条评论

35

我遇到了同样的问题。通过创建链接解决了它。

npm link gulp

8
如另一条评论所述,这是个不好的想法。诸如gulp或grunt的构建系统被设计为使特定项目可以依赖于特定版本的构建程序(因此,无论全局系统处于何种状态或安装了哪些版本,它仍将构建)。试图将全局和本地版本的gulp链接在一起就像自己给脚打上枪伤一样... - Mangled Deutz
@MangledDeutz 我对将gulp与这个特定项目绑定不感兴趣。我只想将其用作一个小型命令行工具,用于自动化一些构建任务。我的gulpfile不会成为git存储库的一部分,事实上,如果我在另一台计算机上克隆此存储库,我可能决定甚至不使用gulp来自动化这些任务,而是使用其他工具。我想假装node和npm不存在,而gulp只是/usr/bin中的一些小程序,它在CWD中查找gulpfile.js并自动工作。如果这就是我想要的,那么这个答案不是一个合理的选择吗? - Jack M
@MangledDeutz 但这对于任何接受文件作为输入的命令行程序都是正确的。 - Jack M
@JackM,这就是为什么每个依赖于全局安装程序(不是“供应商”)的应用程序最终都会出现故障/损坏。这就是为什么最终有人不得不想出Docker,它基本上做了你不喜欢的事情:将所有内容与应用程序一起本地供应... - Mangled Deutz
说到重点:当您开发节点应用时,需要在本地进行依赖项复制,因为它们会随着时间的推移而发生变化,并且您要为其特定版本进行开发。这对于您的dev-dependencies也同样适用。 gulp在这里也不例外:所以,请将它复制到本地。全局cli只是一种方便方式,因此您不必搞乱您的路径。不使用构建系统来进行供应只适用于能够确保非常强大的向后兼容性的系统。但是,JavaScript世界并非如此... - Mangled Deutz
显示剩余5条评论

-2

检查/home/username/.npm目录:可能文件的组/所有者是root。更改为用户名:

chown -R username.username /home/username/.npm

-2

最近我遇到了“本地 gulp 未找到”的错误信息。我通过在全局 node_modules 目录和包含 gulpfile.js 的本地项目目录之间创建符号链接来解决了这个问题。


7
如果你升级基础系统时,本地可用的构建系统没有崩溃,那么你就实现了它的目的。否则,这肯定是一个坏主意,背离了作者的意图… - Mangled Deutz

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