This repository has been archived by the owner on Jul 22, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 212
/
createBlock.js
106 lines (88 loc) · 4.59 KB
/
createBlock.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* eslint-disable */
'use strict';
// Генератор файлов блока
// Использование: node createBlock.js [имя блока] [доп. расширения через пробел]
const fs = require('fs');
const projectConfig = require('./config.js');
const dir = projectConfig.dir;
const mkdirp = require('mkdirp');
const blockName = process.argv[2];
const defaultExtensions = ['scss', 'img']; // расширения по умолчанию
const extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3)));
// Если есть имя блока
if (blockName) {
const dirPath = `${dir.blocks}${blockName}/`; // полный путь к создаваемой папке блока
const made = mkdirp.sync(dirPath);
console.log(`[NTH] Создание папки: ${made}`);
// Обходим массив расширений и создаем файлы, если они еще не созданы
extensions.forEach((extension) => {
const filePath = `${dirPath + blockName}.${extension}`; // полный путь к создаваемому файлу
let fileContent = ''; // будущий контент файла
let fileCreateMsg = ''; // будущее сообщение в консоли при создании файла
if (extension === 'scss') {
fileContent = `// В этом файле должны быть стили для БЭМ-блока ${blockName}, его элементов,\n// модификаторов, псевдоселекторов, псевдоэлементов, @media-условий...\n// Очередность: http://nicothin.github.io/idiomatic-pre-CSS/#priority\n\n.${blockName} {\n\n $block-name: &; // #{$block-name}__element\n}\n`;
// fileCreateMsg = '';
}
else if (extension === 'js') {
fileContent = `/* global document */\n\n// import ready from 'Utils/documentReady.js';\n\n// ready(function() {\n// \n// });\n`;
}
else if (extension === 'md') {
fileContent = '';
}
else if (extension === 'pug') {
fileContent = `//- Все примеси в этом файле должны начинаться c имени блока (${blockName})\n\nmixin ${blockName}(text, mods)\n\n //- Принимает:\n //- text {string} - текст\n //- mods {string} - список модификаторов\n //- Вызов:\n +${blockName}('Текст', 'some-mod')\n\n -\n // список модификаторов\n var allMods = '';\n if(typeof(mods) !== 'undefined' && mods) {\n var modsList = mods.split(',');\n for (var i = 0; i < modsList.length; i++) {\n allMods = allMods + ' ${blockName}--' + modsList[i].trim();\n }\n }\n\n .${blockName}(class=allMods)&attributes(attributes)\n .${blockName}__inner\n block\n`;
}
else if (extension === 'img') {
const imgFolder = `${dirPath}img/`;
if (fileExist(imgFolder) === false) {
const made = mkdirp.sync(imgFolder);
console.log(`[NTH] Создание папки: ${made}`);
} else {
console.log(`[NTH] Папка ${imgFolder} НЕ создана (уже существует) `);
}
}
if (fileExist(filePath) === false && extension !== 'img' && extension !== 'md') {
fs.writeFile(filePath, fileContent, (err) => {
if (err) {
return console.log(`[NTH] Файл НЕ создан: ${err}`);
}
console.log(`[NTH] Файл создан: ${filePath}`);
if (fileCreateMsg) {
console.warn(fileCreateMsg);
}
});
}
else if (extension !== 'img' && extension !== 'md') {
console.log(`[NTH] Файл НЕ создан: ${filePath} (уже существует)`);
}
else if (extension === 'md') {
fs.writeFile(`${dirPath}readme.md`, fileContent, (err) => {
if (err) {
return console.log(`[NTH] Файл НЕ создан: ${err}`);
}
console.log(`[NTH] Файл создан: ${dirPath}readme.md`);
if (fileCreateMsg) {
console.warn(fileCreateMsg);
}
});
}
});
} else {
console.log('[NTH] Отмена операции: не указан блок');
}
function uniqueArray(arr) {
const objectTemp = {};
for (let i = 0; i < arr.length; i++) {
const str = arr[i];
objectTemp[str] = true;
}
return Object.keys(objectTemp);
}
function fileExist(path) {
const fs = require('fs');
try {
fs.statSync(path);
} catch (err) {
return !(err && err.code === 'ENOENT');
}
}