本地安装的gulp无法在命令行中运行?

27

我对nodejs和gulp不太熟悉。我正在一个nodejs项目上工作,需要在所有文件上运行jslint。为此,我正在使用gulp。

我的问题是,为了在cli上运行gulp,我不想全局安装gulp,也不想更新我的路径变量,因此我使用package.json文件在我的项目中本地安装了gulp和其他node模块。

cd myproject

npm install

由于我不想全局安装gulp并希望运行本地gulp,因此我在我的package.json文件中添加了像这样的脚本,如问题中所述:

{
  "name": "",
  "version": "1.0.0",
  "main": "index.js",
  "private": true,
  "dependencies": {
    "async": "1.5.0"
  },
  "devDependencies": {
    "gulp": "^3.9.0",
    "gulp-jslint": "^0.2.2"
  },
  "scripts": {
      "gulp": "./node_modules/.bin/gulp"   // is this correct?
    }
}

我在myproject文件夹中添加了一个gulpfile.js文件

var gulp = require('gulp'); 

// include plug-ins
var jslint = require('gulp-jslint');

// JS hint task
gulp.task('lint', function() {
  gulp.src('./common/srp/*.js')
    .pipe(jslint())
    .pipe(jslint.reporter('default'));
});

gulp.task("default", ["lint"]);

但是现在在我的项目文件夹的命令行中,当我运行 gulp 和 gulp lint 时会出现错误。

user1-VirtualBox:~/myproject$ gulp lint

/usr/local/node-v0.10.26-linux-x64/bin/gulp 没有这个文件或目录

它在全局的 node 模块中寻找 gulp。

是否有一种方式可以在不安装全局并更新 PATH 变量的情况下让 gulp 在 cli 上运行。

任何帮助将不胜感激 谢谢


尝试在您的 package.json 文件中删除脚本。 - mydo47
@mydo47脚本被添加是因为这是一种使用本地安装的gulp的方式。 - user2378417
当你运行 npm install 时,Gulp 将安装在你的本地文件夹中。 - mydo47
11个回答

39

您可以在node_modules/.bin中找到任何通过npm安装的可执行文件。因此,您可以使用以下命令在本地运行gulp:

./node_modules/.bin/gulp
./node_modules/.bin/gulp

你可以在no command 'gulp' found - after installation找到更多信息。


3
bin 文件夹中只有一个 gulp.js 文件。 - Alex Zhukovskiy
4
@AlexZhukovskiy 这是二进制文件。 - YugoAmaryl
但是当我执行 .\scripts\node_modules\.bin\gulp 时,却出现了 Local gulp not found in 的错误,为什么? - Lei Yang
你确定已经安装了 gulp 吗?在 .\scripts\node_modules\.bin 目录下是否有其他二进制文件?scripts 是你的代码仓库吗? - snorberhuis
在本地安装gulp后,node_modules\.bin\gulp不存在。对我来说,运行npm link gulp起作用了。 - miker

14

使用您的代码,您应该能够运行命令 npm run gulp。

请尝试。

定义脚本的一种方法是

"scripts": {
      "gulp": "gulp"
    }

如果您无法在项目中运行 gulp 命令,请运行:

npm link gulp

这将会将你全局安装的gulp与你本地的项目链接起来。然后尝试运行

 gulp -v

如果它显示版本号,则表示已完成。现在,您可以根据需要运行任何gulp命令。


2
npm link gulp proper answer - webdevinci
“npm run gulp” 是我正在寻找的。 - Oneezy

5

package.json 中定义的脚本可以通过 NPM 访问,即 npm run-script gulp。我猜你正在尝试运行普通的 gulp,但这样做应该会失败,因为你没有全局安装它。

脚本部分不会自动创建别名,我认为这是你在这里犯的错误。你可以自己定义一个别名或者创建一个简单的 bash 脚本,如果你不想每次都输入命令。


3

尝试:

path_to_node path_to_gulp_js gulp_task

例子:

node\node.exe node_modules\gulp\bin\gulp.js build

2

就像@snorberhuis所说的那样。让gulp全局运行的唯一方法是手动调用gulp。我正在Jenkins环境中构建。

执行Windows批处理命令

cd your-app
npm install gulp

执行Windows批处理命令。
cd your-app\node_modules\.bin 
gulp

1
只是另一种本地可行但会让您感觉全局的替代方案。 将以下内容添加到您的shell配置文件中,即~/.bash_profile export PATH=$PATH:./node_modules/.bin 您需要source该文件,执行rehash或者只需打开一个新的shell,然后gulp(以及该文件夹内的任何其他脚本)就可以作为全局命令使用。

1
我在各个地方碰壁后,找到了一个简单的方法来安装npm依赖项。只需前往您的应用程序并像这样安装npm依赖项:
1- E:\webra-jenkins\Code\trunk\WebRa.Web>npm install 一旦安装了npm,然后进入此目录
2- [%Application_path%]\node_modules\.bin 并执行gulp并提供您的文件/任务,如下所示:
3-[%Application_path%]\node_modules\.bin>gulp gulpfile --tasks 在我的情况下,当我看到以下行时......我感到内心的幸福。
18:06:36] Working directory changed to [%Application_path%]
[18:06:37] Tasks for [%Application_path%]\gulpfile.js

现在您可以逐个运行您的任务。
[%Application_path%]\node_modules\.bin>gulp pack-vendor-js

0
我知道的最简单的解决方案是使用 npm bin:
`npm bin`/gulp ...

这可以让你避免硬编码任何路径。


0

检查你的项目node_modules/.bin文件夹,确保gulp在其中。我曾经遇到过这样的情况,它不在那里,但我从未找到原因。如果它不在那里,请尝试重新安装本地的gulp并查看是否出现。如果这样做不起作用,并且你厌倦了这个问题,gulp-cli包肯定会解决它,但这不应该是你必须要做的事情。


0

对我来说什么都不起作用。我按照所有人的指示进行了操作。无论我做什么,都无法运行Gulp命令。

为了解决这个问题,我打开了Node.js命令提示符,这是在下载和运行node.js时自动安装的。

一旦我进入了这个命令提示符,我就可以运行以下命令:

npm install -g gulp
gulp -v

这可能是一个普遍的常识问题,但对于初学者来说,没有人建议从node.js命令提示符中运行并安装gulp。我读到的所有内容都谈到了使用具有提升权限的普通powershell或命令提示符。


请在您的回答中提供更多细节。目前的写法让人难以理解您的解决方案。 - Community

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