Gulp 每次我运行吞咽任何东西时,我都会得到一个断言错误。-必须指定任务函数

Gulp 每次我运行吞咽任何东西时,我都会得到一个断言错误。-必须指定任务函数,gulp,gulp-watch,Gulp,Gulp Watch,我正在尝试运行下面的命令,但不幸的是,我遇到了错误 $ gulp build 在我的终端中,我得到了这个断言错误。我已卸载了节点和NPM,并使用brew重新安装,步骤如下。我的节点版本是v10.5.0,npm版本是6.1.0 我的系统是MacOS High Sierra10.13.2 assert.js:269 throw err; ^ AssertionError [ERR_ASSERTION]: Task function must be specified at

我正在尝试运行下面的命令,但不幸的是,我遇到了错误

$ gulp build
在我的终端中,我得到了这个断言错误。我已卸载了节点NPM,并使用brew重新安装,步骤如下。我的节点版本是v10.5.0,npm版本是
6.1.0

我的系统是MacOS High Sierra
10.13.2

assert.js:269
    throw err;
    ^

AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (bulkit/startup-kit/node_modules/undertaker/lib/set-task.js:10:3)
    at Gulp.task (startup-kit/node_modules/undertaker/lib/task.js:13:8)
    at Object.<anonymous> 
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)

Gulp4.0改变了如果任务依赖于另一个要执行的任务,那么应该定义任务的方式。列表参数已被弃用

gulpfile.js中的一个示例是:

// Starts a BrowerSync instance
gulp.task('server', ['build'], function(){
  browser.init({server: './_site', port: port});
});
他们引入了
gulp.series()
gulp.parallel()
而不是list参数

此任务应更改为以下内容:

// Starts a BrowerSync instance
gulp.task('server', gulp.series('build', function(){
  browser.init({server: './_site', port: port});
}));
我不是这方面的专家。您可以在以下由Jhey Thompkins和Stefan Baumgartner撰写的优秀博客文章中看到一个更强大的示例


将package.json文件中的gulp版本降低到3.9.1-

"gulp": "^3.9.1",

因为
gulp.task(name,deps,func)
gulp.task(name,gulp.{series | parallel}(deps,func))
取代


您使用的是最新版本的gulp,但代码较旧。修改代码或降级。

使用Gulp时,我会遇到相同的错误。解决方案是切换到Gulp版本3.9.1,包括本地版本和CLI版本

sudo npm install -g gulp@3.9.1
在项目的文件夹中运行

npm install gulp@3.9.1

您不需要将您的吞咽量从吞咽4降低到。使用gulp.series()组合多个任务。首先,使用

npm安装--全局gulp cli

然后使用在您的工作目录上进行本地安装

npm安装--保存开发包

示例:

gulp.task('default', ['sass'], function() {....} );
gulp.task('default', gulp.series(sass), function() {....} );
package.json

{
  "name": "gulp-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "browser-sync": "^2.26.3",
    "gulp": "^4.0.0",
    "gulp-sass": "^4.0.2"
  },
  "dependencies": {
    "bootstrap": "^4.3.1",
    "jquery": "^3.3.1",
    "popper.js": "^1.14.7"
  }
}
gulpfile.js

var gulp = require("gulp");
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();

// Specific Task
function js() {
    return gulp
    .src(['node_modules/bootstrap/dist/js/bootstrap.min.js', 'node_modules/jquery/dist/jquery.min.js', 'node_modules/popper.js/dist/umd/popper.min.js'])
    .pipe(gulp.dest('src/js'))
    .pipe(browserSync.stream());
}
gulp.task(js);

// Specific Task
function gulpSass() {
    return gulp
    .src(['src/scss/*.scss'])
    .pipe(sass())
    .pipe(gulp.dest('src/css'))
    .pipe(browserSync.stream());
}
gulp.task(gulpSass);

// Run multiple tasks
gulp.task('start', gulp.series(js, gulpSass));
运行
gulpstart
启动多个任务,并针对特定任务运行
gulpjs
gulpSass

步骤:

  • “吞咽”:“^3.9.1”
  • npm安装
  • 吞咽式

  • 尝试替换最后一行gulpfile.js

    gulp.task('default', ['server', 'watch']);
    


    为了修复错误而不断更改gulp&npm版本是不好的。在重新安装工作机器后的最后几天,我遇到了一些异常。并且浪费了大量的时间来重新安装和修复它们

    因此,我决定将所有版本升级到最新版本:

    npm -v : v12.13.0 
    node -v : 6.13.0
    gulp -v : CLI version: 2.2.0 Local version: 4.0.2
    
    出现此错误是因为它在gulpfile中的编码方式,而不是版本不匹配。 因此,这里您必须更改gulpfile中的两个内容,以与Gulp版本4保持一致。 Gulp 4更改了启动任务的方式,而不是版本3

  • 在版本4中,您必须先将任务定义为函数,然后才能根据其字符串名称将其称为“吞咽”任务。在V3中:
  • task('serve',['sass',function(){..})

    但在V4中,应该是这样的:

    function serve() {
    ...
    }
    gulp.task('serve', gulp.series(sass));
    
  • 正如@Arthur所提到的,您需要更改向task函数传递参数的方式。在V3中是这样的:
  • gulp.task('serve',['sass',function()){ ... });

    但在V4中,它应该是:

    gulp.task('serve', gulp.series(sass));
    

    问题是您使用的是gulp 4,而gulfile.js中的语法是gulp 3。所以要么把你的gulp降到3.x.x,要么利用gulp4语法

    语法吞咽3:

    gulp.task('default', ['sass'], function() {....} );
    
    gulp.task('default', gulp.series(sass), function() {....} );
    
    语法吞咽4:

    gulp.task('default', ['sass'], function() {....} );
    
    gulp.task('default', gulp.series(sass), function() {....} );
    
    您可以在以下网站上阅读有关“吞咽”和“吞咽”任务的更多信息:

    用gulp.series()替换[]对我来说肯定很有效,我需要做的另一个改变是使用gulp v4.02将我的主要任务“Ex.gulp main task”移动到gulp文件的末尾,从gulp 3.x迁移到gulp 4.x时,我们会遇到以下常见错误:

    错误:

    gulp.task('default', ['sass'], function() {....} );
    
    gulp.task('default', gulp.series(sass), function() {....} );
    
    • AssertionError[ERR_ASSERTION]:必须指定任务函数
    • 断言错误[ERR_ASSERTION]:从未定义任务:
    • 以下任务未完成:是否忘记发出异步完成信号
    关于任务定义和执行,这里有几点需要注意:

  • 首先定义任务
  • 使用回报
  • 然后使用gulp.series()执行
  • 这里是使用Gulp v4的quickGulp代码:

    // First define task with Return
    gulp.task('css-minify', function () {
        return gulp.src('assets/images/*.*')
            .pipe(smushit({verbose: true}))
            .pipe(gulp.dest('assets/images'));
    });
    
    // Then execute task with bracket '()' instead of '[]'
    gulp.task('default', gulp.series('css-minify'));
    

    使用gulp.task(gulp.series())更新gulp.task()后工作

    如果您在节点v10上,请不要这样做。@bbsimonbb您能详细说明一下吗?@Henri第4版更改了任务的运行方式,因此为了使当前代码正常工作,他需要运行gulp 3.9.1。但更好的答案是更新他的代码,使其与Gulp4+兼容,这已经足够接近了。必须检查Gulp网站以获得正确的语法并添加导出。这将我的错误从
    任务必须指定
    更改为
    任务从未定义
    @2540625我希望您最终将其排序,但我遇到了相同的问题,直到我将Gulp.Task的定义与series()/parallel()一起移动以下调用,其中定义了名为的任务。这看起来像是在定义函数之前尝试使用函数的典型javascript错误。@Jon这正是在我的案例中发生的情况,我将任务系列定义移到了我定义任务的部分下面,并且它工作了。(这在v3中不是问题)。