Gulp 4 - ошибка при сборке проекта
Прошу помощи у разбирающихся в Gulp 4.
Папки проекта:
exports.default = series(remove, parallel(script, styles, html, images, lang, manifest)/*, 'archive'*/); // exports.default = series(remove, parallel(script, styles, html, images, lang, manifest), archive); Функции из задачи:
Если ставлю второй вариант задачи (закомментированный) с функцией archive, то сборка падает с ошибкой на стадии archive. Бывает что проходит все стадии, но тогда в zip-архиве просто пустые папки без файлов. Подскажите, может это неправильный синтаксис вызова функций для моей сборки: exports.default = series(remove, parallel(script, styles, html, images, lang, manifest), archive); Как исправить чтоб и archive правильно отрабатывал? |
Весь файл gulpfile.js
/** * gulp - Сборка пакета (просто ввести в консоле) * gulp archive - Создаёт zip */ const { series, parallel } = require('gulp'), gulp = require('gulp'), vers = require('./app/manifest.json').version, babel = require('gulp-babel'), uglify = require('gulp-uglify'), cleanCSS = require('gulp-clean-css'), htmlmin = require('gulp-htmlmin'), del = require('del'), zip = require('gulp-zip'); function remove(cb) { // del(['dist/**/*']).then(paths => { // console.log('Удалены файлы и папки:\n', paths.join('\n')); // }); del(['dist/*.html', 'dist/manifest.json', 'dist/css/*.css', 'dist/img/*.png', 'dist/js/*.js', 'dist/language/en/*.json', 'dist/language/ru/*.json']); cb(); } function styles(done) { gulp.src('app/css/**/*.css').pipe(cleanCSS()).pipe(gulp.dest('dist/css')); done(); } function html(done) { gulp.src('app/*.html').pipe(htmlmin({ collapseWhitespace: true, removeComments: true, minifyCSS: true })).pipe(gulp.dest('dist')); done(); } function script(done) { gulp.src('app/js/**/*.js') .pipe(babel({ presets: ['@babel/env'] })) .pipe(uglify()) .pipe(gulp.dest('dist/js')); done(); } function manifest(done) { gulp.src('app/manifest.json').pipe(gulp.dest('dist')); done(); } function lang(done) { gulp.src('app/language/**/**/*').pipe(gulp.dest('dist/language')); done(); } function images(done) { gulp.src('app/img/**/*').pipe(gulp.dest('dist/img')); done(); } gulp.task('archive', () => gulp.src('dist/**/*') .pipe(zip(`name_v${vers}.zip`)) .pipe(gulp.dest('versions')) ); function archive(cb) { gulp.src('dist/**/*').pipe(zip(`name_v${vers}.zip`)).pipe(gulp.dest('versions')); cb(); } exports.default = series(remove, parallel(script, styles, html, images, lang, manifest)/*, 'archive'*/); // exports.default = series(remove, parallel(script, styles, html, images, lang, manifest), archive); |
MC-XOBAHCK,
Дело в том, что все задачи remove, styles, и т.д. являются асинхронными, соответственно нужно информировать gulp, когда та или иная задача завершается. Вы пытаетесь вызвать callback функцию, но код написан неправильно. Поток ещё не завершается, а callback функция вызывается синхронно. Перепишите все задачи подобным образом, и будет вам счастье function remove() { return del(['dist/*.html', 'dist/manifest.json', 'dist/css/*.css', 'dist/img/*.png', 'dist/js/*.js', 'dist/language/en/*.json', 'dist/language/ru/*.json']); } function styles() { return gulp.src('app/css/**/*.css').pipe(cleanCSS()).pipe(gulp.dest('dist/css')); } ... ... ... |
destus, Спасибо вам! Действительно так работает.
А я три дня над этим просидел. Начинал кстати с return. Наверное когда с перемещением файлов решал проблему обчитался доков и переписал всё. СПАСИБО! |
Часовой пояс GMT +3, время: 11:49. |