Почему Gulp выполняет одну и ту же задачу дважды? - PullRequest
0 голосов
/ 08 октября 2019

У меня проблема, похожая на вопрос , опубликованный здесь , но ни один из приведенных там ответов не применим к моей ситуации.

Когда я запускаю единственную задачу, определенную в моем 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));
}

Thisэто команда, которую я запускаю в приглашении 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?

Кстати, это моя первая попытка глотка, поэтому я прошу прощения, если это сумасшедший вопрос.

1 Ответ

1 голос
/ 09 октября 2019

Ваша задача не выполняется дважды, просто кажется, что она выполняется, потому что вы используете 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...