为什么Gulp运行两次相同的任务?

问题描述 投票:0回答:1

我遇到的问题与question posted here类似,但那里给出的答案均不适用于我的情况。

当我运行Gulpfile.js文件中定义的唯一任务时,它将被执行两次。

我正在使用Gulp版本4.0.2

这是我的Gulpfile.js文件的内容:

const { src, dest, watch, series, parallel } = require('gulp');
const sass = require('gulp-sass');
const rename = require('gulp-rename');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');    
const files = {
    bootstrapSrcPath: 'bootstrap-sass/bootstrap.scss',
    bootstrapDstPath: 'Test'
};

exports.scssTask = series(
    scssTaskFunc
);

function scssTaskFunc() {  
    return src(files.bootstrapSrcPath)            
        .pipe(sass({ style: 'expanded' }))
        .pipe(dest(files.bootstrapDstPath))
        .pipe(postcss([autoprefixer(), cssnano()]))
        .pipe(rename({ suffix: '.min' }))
        .pipe(dest(files.bootstrapDstPath));
}

这是我在CMD提示符下运行的命令和结果:

C:\Users\myUser\source\repos\myProject> cmd.exe / c gulp - b "C:\Users\myUser\source\repos\myProject" --color--gulpfile "C:\Users\myUser\source\repos\myProject\Gulpfile.js" scssTask
[16: 10: 15]Using gulpfile ~\source\repos\myProject\Gulpfile.js
[16: 10: 15]Starting 'scssTask'...
[16: 10: 15] Starting 'scssTaskFunc'...
[16: 10: 17] Finished 'scssTaskFunc' after 1.7 s
[16: 10: 17]Finished 'scssTask' after 1.71 s
Process terminated with code 0.

它可以正常工作,并且输出文件是我期望的,但是重复两次似乎很浪费。

这是gulp显示的任务:

C:\Users\myUser\source\repos\myProject> gulp--tasks
[15: 57: 29]Tasks for ~\source\repos\myProject\Gulpfile.js
[15: 57: 29]└─┬ scssTask
[15: 57: 29]└─┬ <series>
[15:57:29]     └── scssTaskFunc

为什么要运行两次任务,一次作为'scssTask',第二次作为'scssTaskFunc'?

顺便说一句,这是我第一次尝试吞咽,因此,如果这是一个问题,我深表歉意。

gulp
1个回答
1
投票

您的任务没有运行两次,看起来好像是因为您正在使用gulp.series

gulp.seriesgulp.parallel通常用于将任务组合和组成更大的操作。例如,如果您也有一个jsTaskFunc,则可以这样创建任务build

exports.build = parallel(scssTaskFunc, jsTaskFunc);

并运行gulp build将在您的终端中记录以下内容:

[09:42:12] Starting 'build'...
[09:42:12] Starting 'scssTaskFunc'...
[09:42:12] Starting 'jsTaskFunc'...
[09:42:12] Finished 'scssTaskFunc' after 93 ms
[09:42:12] Finished 'jsTaskFunc' after 94 ms
[09:42:12] Finished 'build' after 111 ms

由于您使用gulp.series,现在发生了类似的事情,因为scssTaskscssTaskFunc作为从属任务运行,但是scssTaskscssTaskFunc严格来说不是同一任务。什么都没运行两次。

为了避免混淆,并且因为不需要gulp.series,只需执行:

exports.scssTask = scssTaskFunc;
© www.soinside.com 2019 - 2024. All rights reserved.