Работа над проектом
1. Создадим два макета сайта Portfolio на Figma.
Сайт будет содержать 4 страницы:
Главная, О нас, Портфолио, контакты
Создаем два макета: десктоп — ширина экрана 1200px и мобильная версия 360x800px
2. Подготовим рабочее пространство
2.1 Создадим структуру папок и перенесем необходимые файлы для проекта
- Создать папку и вложенные папки для проекта. Возможная структура на картинке.
- В Visual Studio открыть папку с проектом или занести ее из проводника на рабочее поле редактора кода
- В папке src и во вложенных папках будут находятся все элементы для сайта .
- Перенести все подготовленные файлы в соответствующие папки
- Создать заготовки для css и html файлов.
- Создать простую веб страницу index.html. Для быстрого заполнения кодом в VS можно нажать Shift+!
2.2 Инициализируем проект
В VS запустить терминал (из главного меню или Ctrl+Shift+`) и выполнить инициализацию проекта:
npm init
В результате диалога будет создан файл package.json с описанием основных характеристик проекта и устанавливаемых пакетов.
2.3 Установим gulp
Команды выполняются в терминале. Формат команды для установки необходимых плагинов с помощью npm :
npm install <имя плагина>--save-dev
где
<имя плагина> — имя устанавливаемого пакета
Флаг —save-dev используется для сохранения имени и версии плагина в package.json в раздел devDependencies.
Очистить терминал можно командой clear
Для работы с gulp он должен быть установлен глобально и локально — в текущий проект.
npm i gulp --save-dev
После установки в папке с проектом появится папка node_modules/ в которой будут записаны пакеты установленного плагина и файле package.json будет записана информация об установленном плагине и файл package-lock.json.
2.4 Подготовим переменные для работы
В корневой папке проекта создать файл gulpfile.js (если проект очень большой, можно создать папку с этим именем в которой разместить несколько файлов со сценарием для gulp).
Вводим переменные в которых описаны пути к исходным данным, папке для результата и переменные связанные с установленными плагинами:
/* путь к папке результата и источника данных */
let project_folder = "dist"; let source_folder = "src";
let path = {
build: {
html: project_folder + "/",
css: project_folder + "/css/",
js: project_folder + "/js/",
img: project_folder + "/img/",
fonts: project_folder + "/fonts/",
},
src: {
html: [source_folder + "/*.html", "!" + source_folder + "/_*.html"],
css: source_folder + "/scss/style.scss",
js: source_folder + "/js/script.js",
img: source_folder + "/img/**/*.{jpg,png,svg,gif,ico,webp}",
fonts: source_folder + "/fonts/*.ttf",
},
watch: {
html: source_folder + "/**/*.html",
css: source_folder + "/scss/**/*.scss",
js: source_folder + "/js/**/*.js",
img: source_folder + "/img/**/*.{jpg,png,svg,gif,ico,webp}",
},
clean: "./" + project_folder + "/"
}
/*
переменные для установленных плагинов. После добавления новых плагинов эта запись будет дополняться.
*/
let { src, dest } = require('gulp'),
gulp = require('gulp');
3. Создание сервера
npm i browser-sync --save-dev
В gulpfile.js добавить:
в переменные для установленных плагинов
let { src, dest } добавить строку (переменные разделяются запятой, последняя запись точка с запятой):
browsersync = require("browser-sync").create();
добавить функцию:
function browserSync(params) {
browsersync.init({
server: { baseDir: "./" + project_folder + "/" },
port: 3000,
notify: false
})
}
и переменные в конце документа
let watch = gulp.parallel(browserSync);
exports.watch = watch;
exports.default = watch;
которые связывают переменную gulp c переменными watch и default, и связанными с ними функциями
Для проверки работы браузера в терминале выполнить: gulp
Если отсутствуют ошибки будет открыто окно браузера с записью «Cannot GET» и терминал перейдет в режим ожидания. Ctrl+C для разрыва соединения. Запись в браузере сообщает об отсутствии данных для отображения. 4. Обработка html. Добавить header и footer в html файл.
Сформируем новую web страницу:
- в index.html добавим header.html и footer.html
- Создадим папку dist и запишем туда результат
- выведем новую веб страницу в браузер
Для этого нужно установить плагин gulp-file-include, который подключает отдельные файлы компонентов в итоговые файлы. index.html, header.html и footer.html должны иметь соответствующие данные.
- Установим плагин:
npm i gulp-file-include --save-dev
- В gulpfile.js в let { src, dest } добавить переменную для связи с плагином:
fileinclude = require("gulp-file-include")а также:
добавить функцию:
function html() {
return src(path.src.html)
.pipe(fileinclude())
.pipe(dest(path.build.html))
.pipe(browsersync.stream())
}
изменить переменные build и watch:
let build = gulp.series(html);
let watch = gulp.parallel(build, browserSync);
прописать связь:
Для того, чтобы подключить header.html и footer.html в получателе index. html добавить:
@@include('blocks/header.html')
@@include('blocks/footer.html')
В результате выполнения скрипта будет создана папка dist и в нее будут перенесены все фалы из корня папки src с расширением html в соответствии с маской: html: [source_folder + «/*.html»]
Если не нужно переносить какие то файлы нужно изменить маску, или вынести их в папку blocks
5. Наблюдение за изменениями проекта
Для того, чтобы браузер обновлял страницу на лету при изменении исходных данных, установим наблюдатель. Изменения будем отслеживать по данным указанным в массиве build.watch
добавить функцию:
function watchFiles(params) {
gulp.watch([path.watch.html], html);
}
где html - функция обработки html файлов. В дальнейшем можно наблюдать за css и js, добавляя новые обработчики:
gulp.watch([path.watch.css], css);
gulp.watch([path.watch.js], js);
или другое, можно расширить область наблюдения.
6. Очистка папки результата
npm i del --save-dev
del = require("del"),function clean(params){
return del(path.clean);
}
Заменим переменную построения результата в сценарий выполнения:
let build = gulp.series(clean, html);
Сначала выполняются действия clean, затем указанные в html
7. Обработка css
Обработка стилей будет заключаться в:
- обработке препроцессором sass исходных данных;
- включении миксинов (для облегчения написания повторного CSS-кода.)
- сжатия полученного css файла.
Для этого воспользуемся плагином gulp-sass и sass
Стили обнуления
Для сброса стилей можно применить два подхода (https://github.com/Andy-set-studio/modern-css-reset):
установить в проекте с помощью плагина:
npm install --save-dev modern-css-resetили подключить по ссылке:
<link rel="stylesheet" href="https://unpkg.com/modern-css-reset/dist/reset.min.css" />
- Установим плагин:
npm i gulp-sass sass --save-dev
- В gulpfile.js в let { src, dest } добавить переменную для связи с плагином:
scss = require("gulp-sass")(require('sass')),а также:
добавить функцию:
function css() {
return src(path.src.css)
.pipe(scss({outputStyle: "expanded"})) /* не сжатый */
.pipe(dest(path.build.css))
.pipe(dest(path.build.css))
}
В результате выполнения сценария в папке dist/css запишется файл style.css
Для подключения стилей из других файлов и/или подключения миксинов в style.scss можем добавить include с указанием пути к css:
Например:
@import «blocks/mixins.scss»;
@import «blocks/header.scss»;
@import «about.scss»;
Дополним функцию css:
Плагин
В let { src, dest } добавить строку
1. Вендерные префиксы
npm i gulp-autoprefixer --save-dev autoprefixer = require(«gulp-autoprefixer»),
2. Сборка и группировка медиазапросов
(отмечен как устаревший)
npm i gulp-group-css-media-queries --save-dev group_media = require(«gulp-group-css-media-queries»),
3. Очистка и сжатие css
npm i gulp-clean-css --save-dev 4. Переименование файла
npm i gulp-rename --save-dev При включении этих плагинов функция css:
function css() {
return src(path.src.css)
.pipe(scss({outputStyle: "expanded"})) /* не сжатый */
.pipe( /* автопрефиксер */
autoprefixer({
overrideBrowserslist: ["last 5 versions"],
cascade: true
})
)
.pipe(group_media()) /* сборка и группировка */
.pipe(dest(path.build.css)) /* выгрузить */
.pipe(clean_css()) /* сжать */
.pipe(rename({extname: ".min.css"})) /* переименовать */
.pipe(dest(path.build.css)) /* выгрузить */
}
В результате в папке dist/css будет создано два файла style.css и style.min.css
8. Обработка javascript
Обработка JS будет заключаться в сборке из различных блоков и минификации результирующего файла. Минификацией JS будет заниматься плагин gulp-uglify-es
- Установим плагин:
npm i gulp-uglify-es --save-dev
- В gulpfile.js в let { src, dest } добавить переменную для связи с плагином:
uglify = require("gulp-uglify-es").default,а также:
добавить функцию:
function js() {
return src(path.src.js)
.pipe(fileinclude())
.pipe(dest(path.build.js))
.pipe(uglify()) /* сжатие */
.pipe(rename({extname: ".min.js"})) /* переименование */
.pipe(dest(path.build.js)) /* выгружаем сжатый */
}
1. прописать связь:
exports.js= js;
2.изменить переменные build и watch:
В файле index.html добавляем