Commit 2d451525 authored by Nikolay Gromov's avatar Nikolay Gromov

Добавил слежение за pug и обновление файла конфига

parent bcbb832e
let config = let config =
{ {
// Файлы, классы которых не анализируются при поиске БЭМ-блоков
"notGetBlocks": [ "notGetBlocks": [
"blocks-demo.html", "blocks-demo.html"
], ],
// Классы, которые не нужно считать БЭМ-блоками
"ignoredBlocks": [ "ignoredBlocks": [
"no-js", "no-js"
], ],
// БЭМ-блоки, используемые в проекте
"blocks": [ "blocks": [
"page", "page",
"page-header", "page-header",
"logo", "logo",
"main-nav", "main-nav",
"OLD-block-SHOULD-BE-REMOVED", "burger",
"page-footer"
], ],
// SCSS-файлы, которые будут взяты в сборку стилей перед файлами БЭМ-блоков
"addStyleBefore": [ "addStyleBefore": [
"./src/scss/functions.scss", "./src/scss/functions.scss",
"./src/scss/variables.scss", "./src/scss/variables.scss",
"./src/scss/mixins.scss", "./src/scss/mixins.scss"
], ],
// SCSS-файлы, которые будут взяты в сборку стилей после файлов БЭМ-блоков
"addStyleAfter": [ "addStyleAfter": [
"./src/scss/print.scss", "./src/scss/print.scss"
], ],
// JS-файлы, которые будут взяты в сборку JS перед файлами БЭМ-блоков
"addJsBefore": [], "addJsBefore": [],
// JS-файлы, которые будут взяты в сборку JS после файлов БЭМ-блоков
"addJsAfter": [ "addJsAfter": [
"./src/js/global-script.js", "./src/js/global-script.js"
], ],
// Изображения, копируемые в папку сборки до копирования изображений блоков
"addImages": [], "addImages": [],
// Добавочные файлы, копируемые в папку сборки до копирования доп. файлов блоков
"addAssets": [], "addAssets": [],
// CSS-файлы, копируемые в папку сборки без обработки перед сборкой стилей
"copiedCss": [], "copiedCss": [],
// JS-файлы, копируемые в папку сборки без обработки перед сборкой JS
"copiedJs": [], "copiedJs": [],
// Директории проекта
"dir": { "dir": {
"src": "./src/", "src": "./src/",
"build": "./build/", "build": "./build/",
"blocks": "./src/blocks/", "blocks": "./src/blocks/"
}, }
}; };
module.exports = config; module.exports = config;
...@@ -20,6 +20,8 @@ const pug = require('gulp-pug'); ...@@ -20,6 +20,8 @@ const pug = require('gulp-pug');
const through2 = require('through2'); const through2 = require('through2');
const replace = require('gulp-replace'); const replace = require('gulp-replace');
const getClassesFromHtml = require('get-classes-from-html'); const getClassesFromHtml = require('get-classes-from-html');
const jsonFormat = require('json-format');
const browserSync = require('browser-sync').create();
function compilePug() { function compilePug() {
...@@ -58,10 +60,13 @@ function compilePug() { ...@@ -58,10 +60,13 @@ function compilePug() {
config.blocks = config.blocks.filter(item => blocksList.indexOf(item) >= 0); config.blocks = config.blocks.filter(item => blocksList.indexOf(item) >= 0);
// Добавить в конец списка блоков те элементы, которые использованы в HTML, но отсутствуют в списке // Добавить в конец списка блоков те элементы, которые использованы в HTML, но отсутствуют в списке
Array.prototype.push.apply(config.blocks, getArraysDiff(blocksList, config.blocks)); Array.prototype.push.apply(config.blocks, getArraysDiff(blocksList, config.blocks));
console.log(config.blocks); // Имеем список использованных сейчас на проекте блоков // console.log(config.blocks); // Имеем список использованных сейчас на проекте блоков
// Если есть изменения списка блоков, нужно записать конфиг на диск // Если есть изменения списка блоков
if(oldBlocksListString != JSON.stringify(config.blocks)) { if(oldBlocksListString != JSON.stringify(config.blocks)) {
console.log('Есть изменения списка используемых блоков'); // Записать новый конфиг
writeConfig(config);
// Подновить старый список блоков
oldBlocksListString = JSON.stringify(config.blocks);
} }
} }
else { else {
...@@ -73,11 +78,11 @@ function compilePug() { ...@@ -73,11 +78,11 @@ function compilePug() {
exports.compilePug = compilePug; exports.compilePug = compilePug;
function writeMainStyleFile(cb) { // function writeMainStyleFile(cb) {
console.log('111'); // console.log('111');
cb(); // cb();
} // }
exports.writeMainStyleFile = writeMainStyleFile; // exports.writeMainStyleFile = writeMainStyleFile;
function clearBuildDir() { function clearBuildDir() {
...@@ -88,32 +93,38 @@ function clearBuildDir() { ...@@ -88,32 +93,38 @@ function clearBuildDir() {
} }
exports.clearBuildDir = clearBuildDir; exports.clearBuildDir = clearBuildDir;
function reload(done) {
browserSync.reload();
done();
}
function serve() {
browserSync.init({
server: dir.build,
port: 8080,
startPath: 'index.html',
open: false,
});
watch([
dir.src + '*.pug',
dir.blocks + '**/*.pug',
], series(compilePug, reload));
}
exports.default = series(compilePug, serve);;
// Функции, не являющиеся задачами Gulp ---------------------------------------- // Функции, не являющиеся задачами Gulp ----------------------------------------
/** function writeConfig(config) {
* Получение дефолтных файлов блока (стили, JS, картинки, доп. файлы) var settings = { type: 'space', size: 2 }
* @param {string} block Искомый блок let configText = '// Файл перезаписывается программно при работе автоматизации\nlet config =\n' + jsonFormat(config, settings) + ';\n\nmodule.exports = config;\n';
* @param {string} blocksDir Директория, в которой лежат все блоки fs.writeFile('./config.js', configText, function(err){
* @return {object} Объект с соотв. путями, если они существуют { "style": [], "js": [], "img": [], "assets": [] } if (err) throw err;
*/ console.log('---------- Записан новый config.js');
// function getBlockDefaultFiles(block, blocksDir = dir.blocks) { });
// let res = {}; }
// // Существует дефолтный стилевой файл?
// let defaultStyleFilePath = blocksDir + block + '/' + block + '.scss';
// fileExist(defaultStyleFilePath) ? res.style = [defaultStyleFilePath] : res.style = [];
// // Существует дефолтный JS-файл?
// let defaultJsFilePath = blocksDir + block + '/' + block + '.js';
// fileExist(defaultJsFilePath) ? res.js = [defaultJsFilePath] : res.js = [];
// // Существует дефолтная папка с картинками?
// let defaultImgFolderPath = blocksDir + block + '/img/';
// fileExist(defaultImgFolderPath) ? res.img = [defaultImgFolderPath] : res.img = [];
// // Существует дефолтная папка с доп. файлами?
// let defaultAssetsFolderPath = blocksDir + block + '/assets/';
// fileExist(defaultAssetsFolderPath) ? res.assets = [defaultAssetsFolderPath] : res.assets = [];
// return res;
// }
/** /**
* Проверка существования файла или папки * Проверка существования файла или папки
...@@ -140,6 +151,29 @@ function getArraysDiff(a1, a2) { ...@@ -140,6 +151,29 @@ function getArraysDiff(a1, a2) {
return a1.filter(i=>!a2.includes(i)).concat(a2.filter(i=>!a1.includes(i))) return a1.filter(i=>!a2.includes(i)).concat(a2.filter(i=>!a1.includes(i)))
} }
/**
* Получение дефолтных файлов блока (стили, JS, картинки, доп. файлы)
* @param {string} block Искомый блок
* @param {string} blocksDir Директория, в которой лежат все блоки
* @return {object} Объект с соотв. путями, если они существуют { "style": [], "js": [], "img": [], "assets": [] }
*/
// function getBlockDefaultFiles(block, blocksDir = dir.blocks) {
// let res = {};
// // Существует дефолтный стилевой файл?
// let defaultStyleFilePath = blocksDir + block + '/' + block + '.scss';
// fileExist(defaultStyleFilePath) ? res.style = [defaultStyleFilePath] : res.style = [];
// // Существует дефолтный JS-файл?
// let defaultJsFilePath = blocksDir + block + '/' + block + '.js';
// fileExist(defaultJsFilePath) ? res.js = [defaultJsFilePath] : res.js = [];
// // Существует дефолтная папка с картинками?
// let defaultImgFolderPath = blocksDir + block + '/img/';
// fileExist(defaultImgFolderPath) ? res.img = [defaultImgFolderPath] : res.img = [];
// // Существует дефолтная папка с доп. файлами?
// let defaultAssetsFolderPath = blocksDir + block + '/assets/';
// fileExist(defaultAssetsFolderPath) ? res.assets = [defaultAssetsFolderPath] : res.assets = [];
// return res;
// }
/** /**
* СЛУЖЕБНАЯ: Добавляет список классов из принятого HTML в переменную blocksList, используется в потоке обработки Pug. * СЛУЖЕБНАЯ: Добавляет список классов из принятого HTML в переменную blocksList, используется в потоке обработки Pug.
* @param {object} file Обрабатываемый файл * @param {object} file Обрабатываемый файл
...@@ -152,6 +186,7 @@ function getClassesToBlocksList(file, enc, cb) { ...@@ -152,6 +186,7 @@ function getClassesToBlocksList(file, enc, cb) {
cb(null, file); cb(null, file);
return; return;
} }
blocksList = [];
// Проверяем, не является ли обрабатываемый файл исключением // Проверяем, не является ли обрабатываемый файл исключением
let processThisFile = true; let processThisFile = true;
config.notGetBlocks.forEach(function(item) { config.notGetBlocks.forEach(function(item) {
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
"cross-env": "^5.0.0", "cross-env": "^5.0.0",
"css-mqpacker": "^7.0.0", "css-mqpacker": "^7.0.0",
"del": "^3.0.0", "del": "^3.0.0",
"get-classes-from-html": "^1.0.1",
"gh-pages": "^2.0.1", "gh-pages": "^2.0.1",
"gulp": "^4.0.0", "gulp": "^4.0.0",
"gulp-cheerio": "^0.6.2", "gulp-cheerio": "^0.6.2",
...@@ -67,6 +68,7 @@ ...@@ -67,6 +68,7 @@
"gulp-wait": "0.0.2", "gulp-wait": "0.0.2",
"gulp.spritesmith": "^6.3.0", "gulp.spritesmith": "^6.3.0",
"husky": "^1.1.4", "husky": "^1.1.4",
"json-format": "^1.0.1",
"jstransformer-markdown-it": "^2.0.0", "jstransformer-markdown-it": "^2.0.0",
"lint-staged": "^8.0.4", "lint-staged": "^8.0.4",
"merge-stream": "^1.0.1", "merge-stream": "^1.0.1",
...@@ -81,7 +83,6 @@ ...@@ -81,7 +83,6 @@
}, },
"dependencies": { "dependencies": {
"baron": "^3.0.3", "baron": "^3.0.3",
"get-classes-from-html": "^1.0.1",
"ismobilejs": "^0.5.1", "ismobilejs": "^0.5.1",
"jquery": "^3.1.1", "jquery": "^3.1.1",
"jquery-migrate": "^3.0.0", "jquery-migrate": "^3.0.0",
......
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