Gulp错误:gulp.hasTask不是函数

时间:2018-01-30 03:46:09

标签: 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

7 个答案:

答案 0 :(得分:23)

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

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

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

示例:

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();
}));

答案 1 :(得分:15)

重要的是本地版本。由于gulp 4.0.0引入了重大更改,您可以简单地执行我所做的操作 - 明确将本地程序包设置回工作版本:

npm install --save-dev gulp@3.9.1

最近有几次我咬了我一次,我会再次回到这里,我确定。

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

答案 2 :(得分:1)

Saurabh Pati's answer the 答案。顺便说一句,一种快速的解决方法是将run-sqeuence软件包替换为gulp4-run-sequence软件包。

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

ngOnInit(){
    // Other code
    isChecked = this.cookieService.getCookie('isChecked');
}

public fieldChange(values: any){
    // Other code
    this.cookieService.setCookie('isChecked',isChecked);
}

然后打开yarn remove gulp 并将package.json替换为

"run-sequence": "^0.3.6",

现在运行

"gulp4-run-sequence": "^1.0.0",

在您的yarn install 中,将Gulpfile.js替换为

runSequence = require('run-sequence'),

然后,您完成了。 :)

答案 3 :(得分:0)

我遇到了同样的问题,无法安装gulp 3.9.1版本。安装后,是4.0.0。为-g和--save dev安装相同的版本-解决了hasTask的问题,并为CLI和本地提供了3.9.1版本。不要修复漏洞。它将gulp本地设置为4.0.0。 因此,只需安装npm i gulp @3.9.1 -gnpm i gulp @3.9.1 --save-dev

答案 4 :(得分:0)

我也遇到了同样的错误。从我的研究中我发现是由于gulp 4.0版本造成的。因此,如果您具有gulp4.0及以上版本,则此解决方案适合您。.安装更高的版本,例如 npm install --save-dev gulp@3.9.1,然后我删除了node_modules文件夹并运行 从命令提示符处再次安装npm。.并且现在一切正常,..感谢@tptompkins。

答案 5 :(得分:-1)

正如其他人已经指出的那样,gulp 4.0.0中发生了重大变化。恢复为gulp 3.9.1应该可以解决此问题。只需确保您的CLI和本地版本相同即可。您可以通过运行以下命令来检查版本:

gulp -v

就我而言,在降级semantic-ui之前,尝试安装依赖于gulp.hasTask功能的另一个软件包gulp会使问题更加严重。

semantic-ui软件包在npm中有一些钩子,因此每次我尝试通过gulp降级npm install gulp@3.9.1 --save时,钩子都会插入,但由于失败而失败到其他一些缺少的包裹。结果,gulp的降级被中止了,而我的版本再次被破坏了。

我通过在特定于版本gulp的安装下运行所有​​依赖程序包来使其工作:

npm install gulp@3.9.1 sparkles duplexify ansi-colors path-dirname semantic-ui --save

如果npm抱怨,您可能需要按顺序添加更多软件包。

答案 6 :(得分:-1)

在阅读完所有建议之后,对我有用的是运行'npm install --save-dev gulp@3.9.1'。我不必删除自己的node_modules文件夹,也不必指定'-g'或'--save-dev'。