24.02.2019, 13:05
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
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);
Функции из задачи: - remove - удаляет файлы из папки dist
- script, styles, html - компилирует и сжимает соответствующие файлы и выгружает их в папку dist
- images, lang, manifest - просто переносит файлы из папки app в папку dist
- archive - функция упаковывает всё содержимое папки dist в zip-архив, который отправляет в папку versions
Вызов в консоле команды gulp для варианта дефолтной задачи без archive - отрабатывает правильно. После этого отдельно вызываю таску gulp archive - отрабатывает правильно.
Если ставлю второй вариант задачи (закомментированный) с функцией archive, то сборка падает с ошибкой на стадии archive. Бывает что проходит все стадии, но тогда в zip-архиве просто пустые папки без файлов.
Подскажите, может это неправильный синтаксис вызова функций для моей сборки:
exports.default = series(remove, parallel(script, styles, html, images, lang, manifest), archive);
Как исправить чтоб и archive правильно отрабатывал?
Последний раз редактировалось MC-XOBAHCK, 24.02.2019 в 13:40.
|
|
24.02.2019, 13:28
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Весь файл 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, 24.02.2019 в 13:32.
|
|
24.02.2019, 15:15
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
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'));
}
...
...
...
|
|
24.02.2019, 15:52
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
destus, Спасибо вам! Действительно так работает.
А я три дня над этим просидел. Начинал кстати с return. Наверное когда с перемещением файлов решал проблему обчитался доков и переписал всё.
СПАСИБО!
|
|
|
|