Новый плагин gulp: правильно сигнализирует о завершении - PullRequest
0 голосов
/ 16 февраля 2020

Итак, я пишу новый плагин gulp, который по большей части работает, но почему-то не работает правильно, и я понятия не имею, почему. Для простого воспроизведения вы можете проверить его локально из GitHub, установить зависимости и запустить демонстрационную задачу: https://github.com/rbnlffl/gulp-rezzy.

Но в любом случае, это мой код плагина:

const through = require('through2').obj;
const sharp = require('sharp');
const log = require('fancy-log');
const chalk = require('chalk');
const File = require('vinyl');
const PluginError = require('plugin-error');
const pluginName = 'gulp-rezzy';

module.exports = (versions = []) => {
    return through(function(chunk, encoding, done) {
        versions.forEach((version, index) => {
            if (!version.suffix || !(version.width || version.height)) {
                this.emit('error', new PluginError(pluginName, 'Incorrect configuration!'));
            }

            const image = sharp(chunk.contents);
            image.resize(version.width, version.height);

            const promise = image.toBuffer();
            promise.then(buffer => {
                const file = new File({
                   cwd: chunk.cwd,
                   base: chunk.base,
                   path: chunk.path.replace(chunk.extname, '') + version.suffix + chunk.extname,
                   contents: buffer
               });

               this.push(file);
               log(`${pluginName}: ${file.relative} ${chalk.gray(`${Object.entries(version)}`)} ${chalk.green('✓')}`);

               if (index === versions.length -1) {
                    done();
               }
            });
        });
    });
};

И это вывод, который я получаю:

~/Sites/gulp-rezzy ? yarn demo
yarn run v1.22.0
$ gulp demo
[12:16:37] Using gulpfile ~/Sites/gulp-rezzy/gulpfile.js
[12:16:37] Starting 'demo'...
[12:16:37] gulp-rezzy: annie-spratt-VtAy7t8zPz4-unsplash-sm.jpg width,500,suffix,-sm ✓
[12:16:37] gulp-rezzy: annie-spratt-VtAy7t8zPz4-unsplash-md.jpg width,1000,suffix,-md ✓
[12:16:37] gulp-rezzy: annie-spratt-VtAy7t8zPz4-unsplash-lg.jpg width,1500,suffix,-lg ✓
[12:16:37] gulp-rezzy: praewthida-k-0Tdvt8QZSAs-unsplash-sm.jpg width,500,suffix,-sm ✓
[12:16:37] gulp-rezzy: praewthida-k-0Tdvt8QZSAs-unsplash-md.jpg width,1000,suffix,-md ✓
[12:16:37] gulp-rezzy: praewthida-k-0Tdvt8QZSAs-unsplash-lg.jpg width,1500,suffix,-lg ✓
[12:16:37] The following tasks did not complete: demo
[12:16:37] Did you forget to signal async completion?
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
~/Sites/gulp-rezzy ? 

Я перепробовал все от переписывания до функции обратного вызова полностью без каких-либо обещаний, до использования Promise.all после накопления моего изображения, используя рефакторинг async / await, но я всегда получаю один и тот же результат. Любая помощь будет принята с благодарностью.

...