Skip to content

Instantly share code, notes, and snippets.

@Ligalaiz
Forked from nicothin/createBlock.js
Created November 9, 2018 18:14
Show Gist options
  • Save Ligalaiz/9204971a8927dfbe9142cb357545fce1 to your computer and use it in GitHub Desktop.
Save Ligalaiz/9204971a8927dfbe9142cb357545fce1 to your computer and use it in GitHub Desktop.
'use strict';
// Требует node.js и пакета mkdirp
// Пакет mkdirp: https://www.npmjs.com/package/mkdirp#install — установить глобально или прописать установку в package.json, в секции devDependencies
// Использование:
// - поместить этот файл в корень проекта
// - исправить пути к генерируемым папкам и файлам, если блоки проекта лежат не в ./src/blocks/
// - в терминале, будучи в корневой папке проекта, выполнить node createBlock.js [имя блока] [доп. расширения через пробел]
const fs = require('fs'); // будем работать с файловой системой
const mkdirp = require('mkdirp'); // зависимость, должна быть установлена (см. описание выше)
let blockName = process.argv[2]; // получим имя блока
let defaultExtensions = ['html', 'less']; // расширения по умолчанию
let extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3))); // добавим введенные при вызове расширения (если есть)
// Если есть имя блока
if(blockName) {
let dirPath = 'src/blocks/' + blockName + '/'; // полный путь к создаваемой папке блока
mkdirp(dirPath, function(err){ // создаем
// Если какая-то ошибка — покажем
if(err) {
console.error('Отмена операции: ' + err);
}
// Нет ошибки, поехали!
else {
console.log('Создание папки ' + dirPath + ' (создана, если ещё не существует)');
// Обходим массив расширений и создаем файлы, если они еще не созданы
extensions.forEach(function(extention){
let filePath = dirPath + blockName + '.' + extention; // полный путь к создаваемому файлу
let fileContent = ''; // будущий контент файла
let styleFileImport = ''; // будущая конструкция импорта файла стилей
let fileCreateMsg = ''; // будущее сообщение в консоли при создании файла
// Если это LESS
if(extention == 'less') {
styleFileImport = '@import \'./src/blocks/' + blockName + '/' + blockName + '.less\';';
fileContent = '// Для импорта в диспетчер подключений: ' + styleFileImport + '\n\n\n.' + blockName + ' {\n \n}\n';
fileCreateMsg = 'Для импорта стилей: ' + styleFileImport;
}
// Если это JS
else if(extention == 'js') {
fileContent = '// (function(){\n// код\n// }());\n';
}
// Создаем файл, если он еще не существует
if(fileExist(filePath) === false) {
fs.writeFile(filePath, fileContent, function(err) {
if(err) {
return console.log('Файл НЕ создан: ' + err);
}
console.log('Файл создан: ' + filePath);
if(fileCreateMsg) {
console.warn(fileCreateMsg);
}
});
}
else {
console.log('Файл НЕ создан: ' + filePath + ' (уже существует)');
}
});
}
});
}
else {
console.log('Отмена операции: не указан блок');
}
// Оставить в массиве только уникальные значения (убрать повторы)
function uniqueArray(arr) {
var objectTemp = {};
for (var i = 0; i < arr.length; i++) {
var 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');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment