Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2019, 12:05
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 449

Gulp 4 - ошибка при сборке проекта
Прошу помощи у разбирающихся в Gulp 4.
Папки проекта:
  • app
  • dist
  • versions
Задача выполняющая сборку проекта:
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 в 12:40.
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2019, 12:28
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 449

Весь файл 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 в 12:32.
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2019, 14:15
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,196

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'));
}

...
...
...
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2019, 14:52
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 449

destus, Спасибо вам! Действительно так работает.
А я три дня над этим просидел. Начинал кстати с return. Наверное когда с перемещением файлов решал проблему обчитался доков и переписал всё.
СПАСИБО!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В событии onClick элемента ошибка при определенном виде передаваемой переменной. rustleofstars Events/DOM/Window 1 25.06.2017 19:08
Ошибка при обработке данных TBUCTEP Общие вопросы Javascript 11 12.05.2017 14:56
ошибка при работе с jQuery autoComplete ogogo jQuery 0 22.10.2016 11:48
ошибка при нажатии на кретик дочернего окна olgatcpip Javascript под браузер 2 04.02.2010 19:53
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 13:17