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

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

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