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

Why is Gulp running the same task twice?

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

当我 运行 在我的 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,所以如果这是一个愚蠢的问题,我深表歉意。

你的任务不是 运行ning 两次,它似乎是因为你正在使用 gulp.series.

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

exports.build = parallel(scssTaskFunc, jsTaskFunc);

和 运行ning 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,现在正在发生类似的事情,因为 scssTask 运行s scssTaskFunc 作为一个依赖任务,但是 scssTaskscssTaskFunc严格来说不是同一个任务。什么都没有 运行 两次。

为避免混淆,并且由于 gulp.series 不是必需的,只需执行以下操作:

exports.scssTask = scssTaskFunc;