我在gulp文件中有一个精灵任务:
var sprite = function() {
// Do something
};
module.exports = {
sprite: sprite
};
这是有效的,但我现在需要在精灵任务之前执行另一个任务。我需要在精灵任务运行之前完成此先前任务,因此我使用runSequence:
var spriteFirst = function() {
// Do something first
};
var spriteSecond = function() {
// Do something second
};
gulp.task('sprite', function(callback) {
runSequence('spriteFirst', 'spriteSecond',
callback);
});
module.exports = {
sprite: sprite
};
此代码给出了以下错误:
ReferenceError: sprite is not defined
似乎module.exports识别'sprite',如果它是一个正常的函数,但是如果它是一个Gulp任务则不会。它是否正确?如果是这样的话为什么会这样呢?
答案 0 :(得分:1)
Gulp任务不普通的JavaScript函数。每个gulp任务都是一个对象,它由名称,函数和(可选)所依赖的其他任务的名称组成。所有这些信息都存储在gulp
实例中。
当您在源代码中引用sprite
时,Node.js会尝试按该名称查找var
或function
。但是没有一个,因为gulp.task()
不会创建var
或function
。它仅将传递的名称和函数存储为gulp
实例中的新任务对象。
同样,如果不使用spriteFirst
定义该任务,则无法使用runSequence()
运行名为gulp.task()
的任务。会发生的是runSequence()
将在gulp
实例中查找名为spriteFirst
的任务对象。但是没有一个,因为您只声明了一个名为spriteFirst
的函数。您需要使用gulp.task()
创建任务对象。
这意味着您的代码应如下所示:
var spriteFirst = function() {
// Do something first
};
var spriteSecond = function() {
// Do something second
};
var sprite = function(callback) {
runSequence('spriteFirst', 'spriteSecond',
callback);
};
gulp.task('spriteFirst', spriteFirst);
gulp.task('spriteSecond', spriteSecond);
gulp.task('sprite', sprite);
module.exports = {
sprite: sprite
};