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