Commit 98efe4fb authored by Nikolay Gromov's avatar Nikolay Gromov

Начало тестового перехода на gulp 4

parent 376f5c38
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
// Подключения зависимостей // Подключения зависимостей
const fs = require('fs'); const fs = require('fs');
const gulp = require('gulp'); const gulp = require('gulp');
const gulpSequence = require('gulp-sequence');
const browserSync = require('browser-sync').create(); const browserSync = require('browser-sync').create();
const realFavicon = require ('gulp-real-favicon'); const realFavicon = require ('gulp-real-favicon');
...@@ -488,6 +487,13 @@ gulp.task('build', function (callback) { ...@@ -488,6 +487,13 @@ gulp.task('build', function (callback) {
); );
}); });
gulp.task('build', gulp.series(
'clean',
gulp.parallel('sprite:svg', 'sprite:png', 'favicons'),
gulp.parallel('style', 'style:single', 'js', 'copy:css', 'copy:img', 'copy:js', 'copy:fonts'),
'pug'
));
// Отправка в GH pages (ветку gh-pages репозитория) // Отправка в GH pages (ветку gh-pages репозитория)
gulp.task('deploy', function() { gulp.task('deploy', function() {
const ghPages = require('gulp-gh-pages'); const ghPages = require('gulp-gh-pages');
...@@ -496,66 +502,61 @@ gulp.task('deploy', function() { ...@@ -496,66 +502,61 @@ gulp.task('deploy', function() {
.pipe(ghPages()); .pipe(ghPages());
}); });
// Задача по умолчанию
gulp.task('default', ['serve']);
// Локальный сервер, слежение // Локальный сервер, слежение
gulp.task('serve', ['build'], function() { gulp.task('serve', gulp.series('build', function() {
browserSync.init({ browserSync.init({
server: dirs.buildPath, server: dirs.buildPath,
port: port,
startPath: 'index.html', startPath: 'index.html',
open: false, open: false,
port: 8080,
}); });
// Слежение за стилями
gulp.watch([ gulp.watch([
dirs.srcPath + 'scss/**/*.scss', dirs.srcPath + 'scss/**/*.scss',
dirs.srcPath + dirs.blocksDirName + '/**/*.scss', dirs.srcPath + dirs.blocksDirName + '/**/*.scss',
projectConfig.addCssBefore, projectConfig.addCssBefore,
projectConfig.addCssAfter, projectConfig.addCssAfter,
], ['style']); ], gulp.series('style'));
// Слежение за отдельными стилями
gulp.watch(projectConfig.singleCompiled, ['style:single',]); if(projectConfig.singleCompiled.length) {
// Слежение за добавочными стилями gulp.watch(projectConfig.singleCompiled, gulp.series('style:single'));
}
if(projectConfig.copiedCss.length) { if(projectConfig.copiedCss.length) {
gulp.watch(projectConfig.copiedCss, ['copy:css']); gulp.watch(projectConfig.copiedCss, gulp.series('copy:css', reload));
} }
// Слежение за изображениями
if(lists.img.length) { if(lists.img.length) {
gulp.watch(lists.img, ['watch:img']); gulp.watch(lists.img, gulp.series('copy:img', reload));
} }
// Слежение за добавочными JS
if(projectConfig.copiedJs.length) { if(projectConfig.copiedJs.length) {
gulp.watch(projectConfig.copiedJs, ['watch:copied:js']); gulp.watch(projectConfig.copiedJs, gulp.series('copy:js', reload));
} }
// Слежение за шрифтами
gulp.watch('/fonts/*.{ttf,woff,woff2,eot,svg}', {cwd: dirs.srcPath}, ['watch:fonts']); gulp.watch(dirs.srcPath + '/fonts/*.{ttf,woff,woff2,eot,svg}', gulp.series('copy:fonts', reload));
// Слежение за pug
gulp.watch([ gulp.watch(dirs.srcPath + '/**/*.pug', gulp.series('pug', reload));
dirs.srcPath + '/**/*.pug',
], ['watch:pug']);
// Слежение за JS
if(lists.js.length) { if(lists.js.length) {
gulp.watch(lists.js, ['watch:js']); gulp.watch(lists.js, gulp.series('js', reload));
} }
// Слежение за SVG (спрайты)
if((projectConfig.blocks['sprite-svg']) !== undefined) { if((projectConfig.blocks['sprite-svg']) !== undefined) {
gulp.watch('*.svg', {cwd: spriteSvgPath}, ['watch:sprite:svg']); // следит за новыми и удаляемыми файлами gulp.watch('*.svg', {cwd: spriteSvgPath}, gulp.series('sprite:svg', reload));
} }
// Слежение за PNG (спрайты)
if((projectConfig.blocks['sprite-png']) !== undefined) { if((projectConfig.blocks['sprite-png']) !== undefined) {
gulp.watch('*.png', {cwd: spritePngPath}, ['watch:sprite:png']); // следит за новыми и удаляемыми файлами gulp.watch('*.png', {cwd: spritePngPath}, gulp.series('sprite:png', reload));
} }
});
// Браузерсинк с 3-м галпом — такой браузерсинк... }));
gulp.task('watch:img', ['copy:img'], reload);
gulp.task('watch:copied:js', ['copy:js'], reload); // Задача по умолчанию
gulp.task('watch:fonts', ['copy:fonts'], reload); gulp.task('default',
gulp.task('watch:pug', ['pug'], reload); gulp.series('serve')
gulp.task('watch:js', ['js'], reload); );
gulp.task('watch:sprite:svg', ['sprite:svg'], reload);
gulp.task('watch:sprite:png', ['sprite:png'], reload);
...@@ -573,41 +574,60 @@ function getFilesList(config){ ...@@ -573,41 +574,60 @@ function getFilesList(config){
'pug': [], 'pug': [],
}; };
// Style // Обходим массив с блоками проекта
for (let blockName in config.blocks) { for (let blockName in config.blocks) {
res.css.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/' + blockName + '.scss'); var blockPath = config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/';
// Разметка (Pug)
if(fileExist(blockPath + blockName + '.pug')){
res.pug.push(blockPath + blockName + '.pug');
}
else {
console.log('---------- Блок ' + blockName + ' указан как используемый, но не имеет pug-файла.');
}
// Стили
if(fileExist(blockPath + blockName + '.scss')){
res.css.push(blockPath + blockName + '.scss');
if(config.blocks[blockName].length) { if(config.blocks[blockName].length) {
config.blocks[blockName].forEach(function(elementName) { config.blocks[blockName].forEach(function(elementName) {
res.css.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/' + blockName + elementName + '.scss'); if(fileExist(blockPath + blockName + elementName + '.scss')){
res.css.push(blockPath + blockName + elementName + '.scss');
}
}); });
} }
} }
res.css = res.css.concat(config.addCssAfter); else {
res.css = config.addCssBefore.concat(res.css); console.log('---------- Блок ' + blockName + ' указан как используемый, но не имеет scss-файла.');
}
// JS // Скрипты
for (let blockName in config.blocks) { if(fileExist(blockPath + blockName + '.js')){
res.js.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/' + blockName + '.js'); res.js.push(blockPath + blockName + '.js');
if(config.blocks[blockName].length) { if(config.blocks[blockName].length) {
config.blocks[blockName].forEach(function(elementName) { config.blocks[blockName].forEach(function(elementName) {
res.js.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/' + blockName + elementName + '.js'); if(fileExist(blockPath + blockName + elementName + '.js')){
res.js.push(blockPath + blockName + elementName + '.js');
}
}); });
} }
} }
res.js = res.js.concat(config.addJsAfter); else {
res.js = config.addJsBefore.concat(res.js); // console.log('---------- Блок ' + blockName + ' указан как используемый, но не имеет JS-файла.');
}
// Images // Картинки (тупо от всех блоков, без проверки)
for (let blockName in config.blocks) {
res.img.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/img/*.{jpg,jpeg,gif,png,svg}'); res.img.push(config.dirs.srcPath + config.dirs.blocksDirName + '/' + blockName + '/img/*.{jpg,jpeg,gif,png,svg}');
}
res.img = config.addImages.concat(res.img);
// Pug
for (let blockName in config.blocks) {
res.pug.push('../blocks/' + blockName + '/' + blockName + '.pug');
} }
// Добавления
res.css = res.css.concat(config.addCssAfter);
res.css = config.addCssBefore.concat(res.css);
res.js = res.js.concat(config.addJsAfter);
res.js = config.addJsBefore.concat(res.js);
res.img = config.addImages.concat(res.img);
return res; return res;
} }
...@@ -616,13 +636,14 @@ function getFilesList(config){ ...@@ -616,13 +636,14 @@ function getFilesList(config){
* @param {string} path Путь до файла или папки] * @param {string} path Путь до файла или папки]
* @return {boolean} * @return {boolean}
*/ */
function fileExist(path) { function fileExist(filepath){
const fs = require('fs'); let flag = true;
try { try{
fs.statSync(path); fs.accessSync(filepath, fs.F_OK);
} catch(err) { }catch(e){
return !(err && err.code === 'ENOENT'); flag = false;
} }
return flag;
} }
// Перезагрузка браузера // Перезагрузка браузера
......
//- ВНИМАНИЕ! Этот файл генерируется автоматически. Не пишите сюда ничего вручную! //- ВНИМАНИЕ! Этот файл генерируется автоматически. Не пишите сюда ничего вручную!
//- Читайте ./README.md для понимания. //- Читайте ./README.md для понимания.
include ../blocks/page/page.pug include ./src/blocks/page/page.pug
include ../blocks/typo/typo.pug include ./src/blocks/typo/typo.pug
include ../blocks/sprite-svg/sprite-svg.pug include ./src/blocks/sprite-svg/sprite-svg.pug
include ../blocks/sprite-png/sprite-png.pug include ./src/blocks/sprite-png/sprite-png.pug
include ../blocks/page-header/page-header.pug include ./src/blocks/page-header/page-header.pug
include ../blocks/page-footer/page-footer.pug include ./src/blocks/page-footer/page-footer.pug
include ../blocks/logo/logo.pug include ./src/blocks/logo/logo.pug
include ../blocks/main-nav/main-nav.pug include ./src/blocks/main-nav/main-nav.pug
include ../blocks/close/close.pug include ./src/blocks/close/close.pug
include ../blocks/burger/burger.pug include ./src/blocks/burger/burger.pug
include ../blocks/code/code.pug include ./src/blocks/code/code.pug
include ../blocks/thumb/thumb.pug include ./src/blocks/thumb/thumb.pug
include ../blocks/alert/alert.pug include ./src/blocks/alert/alert.pug
include ../blocks/menu/menu.pug include ./src/blocks/menu/menu.pug
include ../blocks/label/label.pug include ./src/blocks/label/label.pug
include ../blocks/loader/loader.pug include ./src/blocks/loader/loader.pug
include ../blocks/table/table.pug include ./src/blocks/table/table.pug
include ../blocks/table-responsive/table-responsive.pug include ./src/blocks/table-responsive/table-responsive.pug
include ../blocks/pagination/pagination.pug include ./src/blocks/pagination/pagination.pug
include ../blocks/breadcrumbs/breadcrumbs.pug include ./src/blocks/breadcrumbs/breadcrumbs.pug
include ../blocks/progress/progress.pug include ./src/blocks/progress/progress.pug
include ../blocks/pie-chart/pie-chart.pug include ./src/blocks/pie-chart/pie-chart.pug
include ../blocks/embed-responsive/embed-responsive.pug include ./src/blocks/embed-responsive/embed-responsive.pug
include ../blocks/comment/comment.pug include ./src/blocks/comment/comment.pug
include ../blocks/tooltip/tooltip.pug include ./src/blocks/tooltip/tooltip.pug
include ../blocks/btn/btn.pug include ./src/blocks/btn/btn.pug
include ../blocks/field-text/field-text.pug include ./src/blocks/field-text/field-text.pug
include ../blocks/field-checkbox/field-checkbox.pug include ./src/blocks/field-checkbox/field-checkbox.pug
include ../blocks/field-radio/field-radio.pug include ./src/blocks/field-radio/field-radio.pug
include ../blocks/field-toggler/field-toggler.pug include ./src/blocks/field-toggler/field-toggler.pug
include ../blocks/field-file/field-file.pug include ./src/blocks/field-file/field-file.pug
include ../blocks/field-range/field-range.pug include ./src/blocks/field-range/field-range.pug
include ../blocks/field-select/field-select.pug include ./src/blocks/field-select/field-select.pug
include ../blocks/field-actions/field-actions.pug include ./src/blocks/field-actions/field-actions.pug
include ../blocks/fields-group/fields-group.pug include ./src/blocks/fields-group/fields-group.pug
include ../blocks/form/form.pug include ./src/blocks/form/form.pug
include ../blocks/is-mobile/is-mobile.pug include ./src/blocks/scroll-link/scroll-link.pug
include ../blocks/scroll-link/scroll-link.pug include ./src/blocks/to-top/to-top.pug
include ../blocks/to-top/to-top.pug include ./src/blocks/dropdown/dropdown.pug
include ../blocks/dropdown/dropdown.pug include ./src/blocks/owl-carousel/owl-carousel.pug
include ../blocks/owl-carousel/owl-carousel.pug include ./src/blocks/swipe/swipe.pug
include ../blocks/swipe/swipe.pug include ./src/blocks/nouislider/nouislider.pug
include ../blocks/nouislider/nouislider.pug include ./src/blocks/off-canvas/off-canvas.pug
include ../blocks/off-canvas/off-canvas.pug include ./src/blocks/modal/modal.pug
include ../blocks/modal/modal.pug include ./src/blocks/tabs/tabs.pug
include ../blocks/tabs/tabs.pug include ./src/blocks/object-fit-polyfill/object-fit-polyfill.pug
include ../blocks/object-fit-polyfill/object-fit-polyfill.pug include ./src/blocks/or/or.pug
include ../blocks/or/or.pug include ./src/blocks/baron/baron.pug
include ../blocks/baron/baron.pug
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment