Commit c8639409 authored by Nikolay Gromov's avatar Nikolay Gromov

Допилил новый автомат (без библиотеки компонентов)

parent cc1d9053
# перечисление игнорируемых stylelint-ом файлов # перечисление игнорируемых stylelint-ом файлов
src/scss/blocks-lib.scss
src/scss/style.scss
src/blocks/sprite-png/sprite-png.scss src/blocks/sprite-png/sprite-png.scss
src/blocks/page/page.scss src/blocks/page/page.scss
src/blocks/blocks-library/blocks-library.scss
This diff is collapsed.
...@@ -21,7 +21,7 @@ let config = ...@@ -21,7 +21,7 @@ let config =
], ],
"addJsBefore": [], "addJsBefore": [],
"addJsAfter": [ "addJsAfter": [
"script.js" "./script.js"
], ],
"addAssets": { "addAssets": {
"src/img/demo-avatar-*": "img/", "src/img/demo-avatar-*": "img/",
......
...@@ -5,19 +5,19 @@ ...@@ -5,19 +5,19 @@
// Использование: node createBlock.js [имя блока] [доп. расширения через пробел] // Использование: node createBlock.js [имя блока] [доп. расширения через пробел]
const fs = require('fs'); const fs = require('fs');
const projectConfig = require('./projectConfig.json'); const projectConfig = require('./config.js');
const dirs = projectConfig.dirs; const dir = projectConfig.dir;
const mkdirp = require('mkdirp'); const mkdirp = require('mkdirp');
const blockName = process.argv[2]; // получим имя блока const blockName = process.argv[2];
const defaultExtensions = ['scss', 'md', 'pug', 'img', 'bg-img']; // расширения по умолчанию const defaultExtensions = ['scss', 'img', 'bg-img']; // расширения по умолчанию
const extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3))); // добавим введенные при вызове расширения (если есть) const extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3)));
// Если есть имя блока // Если есть имя блока
if (blockName) { if (blockName) {
const dirPath = `${dirs.srcPath + dirs.blocksDirName}/${blockName}/`; // полный путь к создаваемой папке блока const dirPath = `${dir.blocks}${blockName}/`; // полный путь к создаваемой папке блока
mkdirp(dirPath, (err) => { // создаем mkdirp(dirPath, (err) => { // создаем
// Если какая-то ошибка — покажем // Если какая-то ошибка — покажем
if (err) { if (err) {
console.error(`[NTH] Отмена операции: ${err}`); console.error(`[NTH] Отмена операции: ${err}`);
...@@ -25,45 +25,31 @@ if (blockName) { ...@@ -25,45 +25,31 @@ if (blockName) {
// Нет ошибки, поехали! // Нет ошибки, поехали!
else { else {
console.log(`[NTH] Создание папки ${dirPath} (если отсутствует)`); console.log(`[NTH] Создание папки: ${dirPath} (если отсутствует)`);
// Обходим массив расширений и создаем файлы, если они еще не созданы // Обходим массив расширений и создаем файлы, если они еще не созданы
extensions.forEach((extension) => { extensions.forEach((extension) => {
const filePath = `${dirPath + blockName}.${extension}`; // полный путь к создаваемому файлу const filePath = `${dirPath + blockName}.${extension}`; // полный путь к создаваемому файлу
let fileContent = ''; // будущий контент файла let fileContent = ''; // будущий контент файла
let fileCreateMsg = ''; // будущее сообщение в консоли при создании файла let fileCreateMsg = ''; // будущее сообщение в консоли при создании файла
// Если это SCSS
if (extension === 'scss') { 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`; 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 = ''; // fileCreateMsg = '';
// Добавление импорта файла в диспетчер подключений, если он есть и в нем есть импорты
// TODO
} }
// Если это HTML
else if (extension === 'html') {
fileContent = `<div class="${blockName}">content</div>\n`;
}
// Если это JS
else if (extension === 'js') { else if (extension === 'js') {
fileContent = `// document.addEventListener(\'DOMContentLoaded\', function(){});\n// (function(){\n// код\n// }());\n`; fileContent = `// document.addEventListener(\'DOMContentLoaded\', function(){});\n// (function(){\n// код\n// }());\n`;
} }
// Если это md else if (extension === 'md') {
else if (extension === 'js') {
fileContent = ''; fileContent = '';
} }
// Если это pug
else if (extension === 'pug') { 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!= text\n`; 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!= text\n block\n`;
// Добавление примеси файл примесей, если он есть и в нем есть подключение примесей
// TODO
} }
// Если нужна подпапка для картинок
else if (extension === 'img') { else if (extension === 'img') {
const imgFolder = `${dirPath}img/`; const imgFolder = `${dirPath}img/`;
if (fileExist(imgFolder) === false) { if (fileExist(imgFolder) === false) {
...@@ -76,7 +62,6 @@ if (blockName) { ...@@ -76,7 +62,6 @@ if (blockName) {
} }
} }
// Если нужна подпапка для необрабатываемых картинок
else if (extension === 'bg-img') { else if (extension === 'bg-img') {
const imgFolder = `${dirPath}bg-img/`; const imgFolder = `${dirPath}bg-img/`;
if (fileExist(imgFolder) === false) { if (fileExist(imgFolder) === false) {
...@@ -89,7 +74,6 @@ if (blockName) { ...@@ -89,7 +74,6 @@ if (blockName) {
} }
} }
// Создаем файл, если он еще не существует
if (fileExist(filePath) === false && extension !== 'img' && extension !== 'bg-img' && extension !== 'md') { if (fileExist(filePath) === false && extension !== 'img' && extension !== 'bg-img' && extension !== 'md') {
fs.writeFile(filePath, fileContent, (err) => { fs.writeFile(filePath, fileContent, (err) => {
if (err) { if (err) {
...@@ -117,38 +101,23 @@ if (blockName) { ...@@ -117,38 +101,23 @@ if (blockName) {
} }
}); });
// Добавим созданный блок в projectConfig.json
let hasThisBlock = false;
for (const block in projectConfig.blocks) {
if (block === blockName) {
hasThisBlock = true;
break;
}
}
if (!hasThisBlock) {
projectConfig.blocks[blockName] = [];
const newPackageJson = JSON.stringify(projectConfig, '', 2);
fs.writeFileSync('./projectConfig.json', newPackageJson);
console.log('[NTH] Подключение блока добавлено в projectConfig.json');
}
} }
}); });
} else { } else {
console.log('[NTH] Отмена операции: не указан блок'); console.log('[NTH] Отмена операции: не указан блок');
} }
// Оставить в массиве только уникальные значения (убрать повторы)
function uniqueArray(arr) { function uniqueArray(arr) {
const objectTemp = {}; const objectTemp = {};
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
const str = arr[i]; const str = arr[i];
objectTemp[str] = true; // запомнить строку в виде свойства объекта objectTemp[str] = true;
} }
return Object.keys(objectTemp); return Object.keys(objectTemp);
} }
// Проверка существования файла
function fileExist(path) { function fileExist(path) {
const fs = require('fs'); const fs = require('fs');
try { try {
......
This diff is collapsed.
This diff is collapsed.
...@@ -10,12 +10,9 @@ ...@@ -10,12 +10,9 @@
}, },
"scripts": { "scripts": {
"test:style": "stylelint \"src/**/*.scss\" --syntax=scss", "test:style": "stylelint \"src/**/*.scss\" --syntax=scss",
"test:editorconfig": "editorconfig-cli src/**/*.{js,pug}",
"test": "npm run test:style && npm run test:editorconfig && npm run build",
"start": "gulp", "start": "gulp",
"deploy": "cross-env NODE_ENV=production ./node_modules/.bin/gulp build && cross-env ./node_modules/.bin/gulp deploy", "deploy": "cross-env NODE_ENV=production ./node_modules/.bin/gulp build && cross-env ./node_modules/.bin/gulp deploy",
"build": "cross-env NODE_ENV=production npm start build", "build": "cross-env NODE_ENV=production npm start build",
"img-opt": "cross-env folder=src/img npm start img:opt",
"lint-staged": "lint-staged" "lint-staged": "lint-staged"
}, },
"browserslist": [ "browserslist": [
...@@ -29,13 +26,12 @@ ...@@ -29,13 +26,12 @@
"*.scss": "stylelint --syntax=scss" "*.scss": "stylelint --syntax=scss"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.1.6", "@babel/core": "^7.2.2",
"@babel/preset-env": "^7.1.6", "@babel/preset-env": "^7.2.3",
"@htmlacademy/editorconfig-cli": "^1.0.0", "@htmlacademy/editorconfig-cli": "^1.0.0",
"autoprefixer": "^9.3.1", "autoprefixer": "^9.3.1",
"babelify": "^10.0.0", "babel-loader": "^8.0.4",
"browser-sync": "^2.18.8", "browser-sync": "^2.18.8",
"browserify": "^16.2.3",
"cpy": "^7.0.1", "cpy": "^7.0.1",
"cross-env": "^5.0.0", "cross-env": "^5.0.0",
"css-mqpacker": "^7.0.0", "css-mqpacker": "^7.0.0",
...@@ -43,28 +39,22 @@ ...@@ -43,28 +39,22 @@
"get-classes-from-html": "^1.0.1", "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-cleancss": "^0.2.2",
"gulp-concat": "^2.6.1", "gulp-concat": "^2.6.1",
"gulp-csso": "^3.0.1",
"gulp-debug": "^4.0.0", "gulp-debug": "^4.0.0",
"gulp-if": "^2.0.2", "gulp-if": "^2.0.2",
"gulp-imagemin": "^5.0.3", "gulp-imagemin": "^5.0.3",
"gulp-insert": "^0.5.0",
"gulp-newer": "^1.3.0",
"gulp-notify": "^3.0.0",
"gulp-plumber": "^1.1.0", "gulp-plumber": "^1.1.0",
"gulp-postcss": "^8.0.0", "gulp-postcss": "^8.0.0",
"gulp-pretty-html": "^2.0.9", "gulp-pretty-html": "^2.0.9",
"gulp-pug": "^4.0.1", "gulp-pug": "^4.0.1",
"gulp-pug-lint": "git+https://github.com/nicothin/gulp-pug-lint.git",
"gulp-rename": "^1.2.2", "gulp-rename": "^1.2.2",
"gulp-replace": "^1.0.0", "gulp-replace": "^1.0.0",
"gulp-sass": "^4.0.1", "gulp-sass": "^4.0.1",
"gulp-size": "^3.0.0",
"gulp-sourcemaps": "^2.4.1", "gulp-sourcemaps": "^2.4.1",
"gulp-svgmin": "^2.1.0", "gulp-svgmin": "^2.1.0",
"gulp-svgstore": "^7.0.0", "gulp-svgstore": "^7.0.0",
"gulp-uglify": "^3.0.0", "gulp-uglify": "^3.0.0",
"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", "json-format": "^1.0.1",
...@@ -72,13 +62,15 @@ ...@@ -72,13 +62,15 @@
"lint-staged": "^8.0.4", "lint-staged": "^8.0.4",
"merge-stream": "^1.0.1", "merge-stream": "^1.0.1",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"path": "^0.12.7",
"postcss-import": "^12.0.1", "postcss-import": "^12.0.1",
"postcss-inline-svg": "^3.0.0", "postcss-inline-svg": "^3.0.0",
"postcss-object-fit-images": "^1.1.2", "postcss-object-fit-images": "^1.1.2",
"stylelint": "^9.1.1", "stylelint": "^9.1.1",
"through2": "^3.0.0", "through2": "^3.0.0",
"vinyl-buffer": "^1.0.1", "vinyl-buffer": "^1.0.1",
"vinyl-source-stream": "^2.0.0" "webpack": "^4.27.1",
"webpack-stream": "^5.2.1"
}, },
"dependencies": { "dependencies": {
"baron": "^3.0.3", "baron": "^3.0.3",
......
{
"blocks": {
"page": [],
"typo": [],
"sprite-svg": [],
"sprite-png": [
"__demo"
],
"page-header": [],
"page-footer": [],
"logo": [],
"main-nav": [],
"close": [],
"burger": [],
"code": [],
"thumb": [],
"alert": [],
"menu": [],
"label": [],
"loader": [],
"table": [],
"table-responsive": [],
"pagination": [],
"breadcrumbs": [],
"progress": [],
"pie-chart": [],
"embed-responsive": [],
"comment": [],
"tooltip": [],
"btn": [],
"field-text": [
"--error"
],
"field-checkbox": [
"__input-wrap--error"
],
"field-radio": [
"__input-wrap--error"
],
"field-toggler": [],
"field-file": [
"--error"
],
"field-range": [],
"field-select": [
"--error"
],
"field-actions": [],
"fields-group": [],
"form": [],
"is-mobile": [],
"scroll-link": [],
"to-top": [],
"dropdown": [],
"owl-carousel": [],
"swipe": [],
"nouislider": [],
"off-canvas": [],
"modal": [],
"tabs": [],
"object-fit-polyfill": [],
"or": [],
"baron": [],
"blocks-library": []
},
"addCssBefore": [
"./src/scss/functions.scss",
"./src/scss/variables.scss",
"./src/scss/mixins.scss",
"../../node_modules/owl.carousel/dist/assets/owl.carousel.css",
"../../node_modules/nouislider/distribute/nouislider.css"
],
"addCssAfter": [
"./src/scss/print.scss"
],
"singleCompiled": [
"./src/scss/blocks-library.scss"
],
"addJsBefore": [
"./node_modules/jquery/dist/jquery.min.js",
"./node_modules/jquery-migrate/dist/jquery-migrate.min.js",
"./node_modules/svg4everybody/dist/svg4everybody.js",
"./node_modules/ismobilejs/dist/isMobile.min.js",
"./node_modules/owl.carousel/dist/owl.carousel.js",
"./node_modules/swipejs/build/swipe.min.js",
"./node_modules/nouislider/distribute/nouislider.js",
"./node_modules/object-fit-images/dist/ofi.js",
"./node_modules/baron/baron.min.js"
],
"addJsAfter": [
"./src/js/global-script.js"
],
"addImages": [
"./src/img/*.{jpg,jpeg,gif,png,svg,ico}"
],
"copiedCss": [],
"copiedJs": [],
"dirs": {
"srcPath": "./src/",
"buildPath": "./build/",
"blocksDirName": "blocks"
}
}
\ No newline at end of file
...@@ -16,9 +16,6 @@ block header ...@@ -16,9 +16,6 @@ block header
block content block content
h1 Заголовок с каким-то эффектом h1 Заголовок с каким-то эффектом
p Содержимое. #[a(href='blocks-demo.html') Библиотека блоков]. p Содержимое. #[a(href='blocks-demo.html') Библиотека блоков].
.row
.closess
.alertfgdf
block footer block footer
+page-footer() +page-footer()
......
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