News site layout using GULP, BEM, BABEL, WEBPACK, SCSS, SMART-GRID
git clone https://github.com/andreyalexeich/gulp-scss-starter.git
gulp
глобально: yarn global add gulp-cli
bem-tools-core
глобально: yarn global add bem-tools-core
cd gulp-scss-starter
yarn
yarn run dev
(режим разработки)yarn run build
(режим сборки)Если вы всё сделали правильно, у вас должен открыться браузер с локальным сервером. Режим сборки предполагает оптимизацию проекта: сжатие изображений, минифицирование CSS и JS-файлов для загрузки на сервер.
gulp-scss-starter
├── dist
├── gulp-tasks
├── src
│ ├── blocks
│ ├── fonts
│ ├── img
│ ├── js
│ ├── styles
│ ├── views
│ └── .htaccess
├── gulpfile.babel.js
├── webpack.config.js
├── package.json
├── .babelrc.js
├── .bemrc.js
├── .eslintrc.json
├── .stylelintrc
├── .stylelintignore
└── .gitignore
.babelrc.js
— настройки Babel.bemrc.js
— настройки БЭМ.eslintrc.json
— настройки ESLint.gitignore
– запрет на отслеживание файлов Git’ом.stylelintrc
— настройки Stylelint.stylelintignore
– запрет на отслеживание файлов Stylelint’омgulpfile.babel.js
— настройки Gulpwebpack.config.js
— настройки Webpackpackage.json
— список зависимостейsrc
- используется во время разработки:src/blocks
src/fonts
src/img
src/js
src/views/pages
src/styles
src/views
src/.htaccess
dist
- папка, из которой запускается локальный сервер для разработки (при запуске yarn run dev
)gulp-tasks
- папка с Gulp-таскамиyarn run lint:styles
- проверить SCSS-файлы. Для VSCode необходимо установить плагин. Для WebStormLanguages & Frameworks - Style Sheets - Stylelint
(ошибки будут исправлены автоматически при сохранении файла)yarn run lint:styles --fix
- исправить ошибки в SCSS-файлахyarn run lint:scripts
- проверить JS-файлыyarn run lint:scripts --fix
- исправить ошибки в JS-файлахyarn run dev
- запуск сервера для разработки проектаyarn run build
- собрать проект с оптимизацией без запуска сервераyarn run build:views
- собрать HTML-файлыyarn run build:styles
- скомпилировать SCSS-файлыyarn run build:scripts
- собрать JS-файлыyarn run build:images
- собрать изображенияyarn run build:webp
- сконвертировать изображения в формат .webp
yarn run build:sprites
- собрать спрайтыyarn run build:fonts
- собрать шрифтыyarn run build:favicons
- собрать фавиконкиyarn run build:gzip
- собрать конфигурацию Apachesrc/blocks/modules
src/views/index.html
(или в необходимый файл страницы, откуда будет вызываться блок)src/blocks/modules/_modules.scss
src/js/import/modules.js
Пример структуры папки с БЭМ-блоком:
blocks
├── modules
│ ├──header
│ │ ├── header.html
│ │ ├── header.js
│ │ ├── header.scss
Чтобы вручную не создавать соответствующие папку и файлы, достаточно в консоли прописать команду bem create my-block
- для создания папки БЭМ-блока, где my-block
- имя БЭМ-блока
src/views/pages
src/views/index.html
src/fonts
.woff
и .woff2
src/styles/base/_fonts.scss
src/img
src/img/favicon
и иметь размер не менее 1024px x 1024px
.webp
. Подробная информация по использованию @vk_it-webp">тут.node_modules
yarn add package_name
import $ from "jquery";
src/styles/vendor/_libs.scss
Если в вашем проекте используется несколько библиотек, которые необходимо подключать на нескольких страницах, во избежании ошибок нужно:
src/js/import
создать папку pages
pages
создать js-файл для страницы, например, pageA.js
, и импортировать туда библиотеку, которая будет использоваться только на этой страницеwebpack.config.js
в точку входа добавить js-файлы страниц, пример:
entry: {
main: "./src/js/index.js",
pageA: "./src/js/import/pages/pageA.js",
pageB: "./src/js/import/pages/pageB.js"
}
В сборщик включена CSS-сетка smart-grid от Дмитрия Лаврика. Она позволяет избавиться от
лишних классов в разметке за счёт использования примесей в SCSS и ускоряет адаптивную вёрстку. Конфигурация уже настроена в соответствии с сеткой Bootstrap. Пример использования:
SCSS
.items{
@include row-flex();
@include md(justify-content, center);
.item{
@include col();
@include size(3);
@include size-md(5);
@include size-xs(10);
}
}
Результат
.items {
display: flex;
flex-wrap: wrap;
margin-left: -15px;
margin-right: -15px;
}
.items .item {
box-sizing: border-box;
margin-left: 15px;
margin-right: 15px;
word-wrap: break-word;
width: calc(100% / 12 * 3 - 30px);
}
@media screen and (max-width: 992px) {
.items {
justify-content: center;
}
.items .item {
width: calc(100% / 12 * 5 - 30px);
}
}
@media screen and (max-width: 576px) {
.items .item {
width: calc(100% / 12 * 10 - 30px);
}
}