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 Sierra10.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中不是问题)。