我遇到的问题与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.series
。
gulp.series
和gulp.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
,现在发生了类似的事情,因为scssTask
将scssTaskFunc
作为从属任务运行,但是scssTask
和scssTaskFunc
严格来说不是同一任务。什么都没运行两次。
为了避免混淆,并且因为不需要gulp.series
,只需执行:
exports.scssTask = scssTaskFunc;