Gulp错误:gulp.hasTask不是函数

use*_*968 32 npm gulp

当我运行"gulp"时,我得到以下内容.看起来我有一个混合的CLI和本地版本,不确定如何解决这个问题.

cabox@box-codeanywhere:~/workspace/apps/web-ui$ gulp -v
[22:44:23] CLI version 2.0.1
[22:44:23] Local version 4.0.0
cabox@box-codeanywhere:~/workspace/apps/web-ui$
cabox@box-codeanywhere:~/workspace/apps/web-ui$
cabox@box-codeanywhere:~/workspace/apps/web-ui$ gulp
[22:44:28] Using gulpfile ~/workspace/apps/web-ui/gulpfile.js
[22:44:28] Starting 'default'...
[22:44:28] 'default' errored after 5.41 ms
[22:44:28] TypeError: gulp.hasTask is not a function
    at /home/cabox/workspace/apps/web-ui/node_modules/run-sequence/index.js:23:22
    at Array.forEach (<anonymous>)
    at verifyTaskSets (/home/cabox/workspace/apps/web-ui/node_modules/run-sequence/index.js:17:11)
    at runSequence (/home/cabox/workspace/apps/web-ui/node_modules/run-sequence/index.js:130:2)
    at /home/cabox/workspace/apps/web-ui/gulpfile.js:187:5
    at taskWrapper (/home/cabox/workspace/apps/web-ui/node_modules/undertaker/lib/set-task.js:13:15)
    at bound (domain.js:301:14)
    at runBound (domain.js:314:12)
    at asyncRunner (/home/cabox/workspace/apps/web-ui/node_modules/async-done/index.js:55:18)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
cabox@box-codeanywhere:~/workspace/apps/web-ui$ ^C
Run Code Online (Sandbox Code Playgroud)

Sau*_*ati 37

gulp v4发生了重大变化,并且在运行顺序包中产生了一些问题.

因为我没有你的gulpfile.js,所以我只能尝试使用gulp.series和gulp.parallel与你的gulp任务而不是run-sequence

您可能会收到类似'task1'的错误,'task2'无法完成',在任务的功能中,接受完成的回调并在函数结束时调用您的任务中的回调

例:

gulp.task('task1', gulp.series('task1-1', function (done) {
   // task 1 code here
    done();
}));

gulp.task('task2', gulp.series('task2-1', function (done) {
   // task 2 code here
    done();
}));

// Similarly Tasks 3 and 4 Code here

gulp.task('main', gulp.series('task1', 'task2', 'task3', 'task4', function (done) {
    done();
}));
Run Code Online (Sandbox Code Playgroud)


May*_*lam 25

SAURABH帕蒂的回答答案。顺便说一句,一个快速的解决方法是用gulp4-run-sequence包替换run-sqeuence包。

如果您的项目在本地安装了 Gulp,请删除本地版本的 Gulp:

yarn remove gulp
Run Code Online (Sandbox Code Playgroud)

然后打开package.json并替换"run-sequence": "^0.3.6",

"gulp4-run-sequence": "^1.0.0",
Run Code Online (Sandbox Code Playgroud)

现在运行

yarn install
Run Code Online (Sandbox Code Playgroud)

在您的Gulpfile.js,替换runSequence = require('run-sequence'),

runSequence = require('gulp4-run-sequence'),
Run Code Online (Sandbox Code Playgroud)

而且,你已经完成了。:)

  • 2020 年后续,这来自基本的 4.0.2 Gulp 安装,但仍然运行以前的“运行序列”,效果很好。 (2认同)
  • 谢谢,这感觉比降级更好! (2认同)

dvd*_*rgn 24

重要的是本地版本.由于gulp 4.0.0引入了重大更改,您可以简单地执行我所做的操作---将本地软件包显式设置回工作版本:

npm install --save-dev gulp@3.9.1
Run Code Online (Sandbox Code Playgroud)

我最近有几次咬我,我会再次回到这里,我敢肯定.

注意:gulp 3.9.1的依赖性存在许多安全漏洞.你不应该这样做.

  • 安装gulp 3.9.1而不是4.0.0修复了我的"TypeError:gulp.hasTask不是函数"错误,导致rev-manifest.json丢失,但确实显示12个漏洞(1个低,4个中等,6高,1关键). (3认同)