SASS
| Введение | |
| Установка | |
| Инструкции для Gulp (Gulpfile.js) | |
| Объединение файлов стилей и обработка в SASS | |
| Мониторинг изменений (gulp-watch) | |
| Видеоуроки Gulp | |
| Ошибки |
Gulp
Введение
Установка
Рассмотрим установку с помощью
npm. Подразумевается, что nmp Вы уже установили.
О том как установить npm читайте в моей статье Установка npm
$ npm install gulp-cli --global
C:\Users\ao\AppData\Roaming\npm\gulp -> C:\Users\ao\AppData\Roaming\npm\node_modules\gulp-cli\bin\gulp.js
+ gulp-cli@2.2.0
updated 7 packages in 7.386s
Проверить версию gulp
gulp -v
CLI version: 2.2.0 Local version: Unknown
Теперь нужно перейти в директорию, в которой Вы планируете работать. Я буду делать сайт www.HeiHei.ru поэтому перехожу в директорию
$ cd /c/Users/ao/Desktop/Sites/heihei
Затем переходим непосредственно к установке gulp в текущий проект
$ npm install gulp --save-dev
Добавив ключ --save-dev мы указали, что теперь сохраняем в ветку dev, так как Gulp
это пакет, которым мы будем пользоваться в разработке, но на хостинг выкладывать его
не будем, так как на сайте он ничего делать не будет. Вся работа Gulp будет на
стороне разработчика.
Подробнее docs.npmjs.com
Посмотрим, как изменился наш файл pacakge.json
vi package.json
{
"name": "heihei",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"jquery": "^3.4.1",
"normalize.css": "^8.0.1"
},
"devDependencies": {
"gulp": "^4.0.2"
},
"repository": {
"type": "git",
"url": "git+https://github.com/ao/heiheiru.git"
},
"bugs": {
"url": "https://github.com/ao/heiheiru/issues"
},
"homepage": "https://github.com/ao/heiheiru#readme"
}
Появился раздел devDependencies, в который в будущем я добавлю ещё довольно много пакетов.
Если теперь посмотреть содержимое папки node_modules
можно увидеть, что установка Gulp добавила не одну папку, как, например,
сделал бы
jquery а несколько десятков.
Старые версии
npm создавали всегда одну папку и размещали все зависимости туда.
Новые версии npm сохраняют зависимости в родительскую папку node_modules.
Gulpfile.js
После установки Gulp нужно в корневой директории проекта
(в моём случае - heiheiru)
создать файл gulpfile.js
в который мы будем записывать инструкции для Gulp.
Первым делом запишем туда
var gulp = require('gulp');
Начиная с верси 4.0 можно пользоваться новым синтаксисом JavaScript (ES2015+)
import gulp from 'gulp'
Но для этого нужно устанавливать babel и следить чтобы не было ошибок. Я видел на форумах жалобы, сам
пока не пробовал.
Подробности www.npmjs.com
После того как файл gulpfile.js создан можно запустить Gulp
gulp
Результатом будет похожее сообщение
[11:22:35] Using gulpfile ~\Desktop\Sites\heihei\gulpfile.js
[11:22:35] Task never defined: default
[11:22:35] To list available tasks, try running: gulp --tasks
Gulp жалуется на то, что не определно задание по умолчанию - default task
Нужно его определить
vi gulpfile.js
var gulp = require('gulp');
gulp.task('default', function() {
console.log("Gulp is running!");
});
gulp
default запустится но теперь Gulp пожалуется на непонятное закрытие.
[11:31:44] Using gulpfile ~\Desktop\Sites\heihei\gulpfile.js
[11:31:44] Starting 'default'...
Gulp is running!
[11:31:44] The following tasks did not complete: default
[11:31:44] Did you forget to signal async completion?
Эту ошибку можно устранить несколькими способами. Я пользуюсь следующим:
var gulp = require('gulp');
gulp.task('default', function(done) {
console.log("Gulp is running!");
done();
});
gulp
Примеры использования Gulp
Объединение файлов стилей
Во время разработки сайта удобно иметь небольшие отдельные файлы для каждого блока.
С другой стороны на хостинге лучше иметь один файл style.css, чтобы вебсервер делал меньшее количество
обращений к файлам и время загрузки уменьшалось.
Также при разработке удобно пользоваться метаязыками, например, SASS.
const gulp = require('gulp');
const sass = require('gulp-sass');
const browserSync = require('browser-sync').create();
gulp.task('default', function(done) {
console.log("Gulp is running!");
done();
});
// compile scss into css
function style() {
// 1. указываем расположение .scss файлов
return gulp.src('./scss/**/*.scss')
// 2. пропускаем их через sass compiller
.pipe(sass())
// 3. указываем CSS файл, в который запишется результат?
.pipe(gulp.dest('./css/style.css'))
}
exports.style = style;
gulp-watch
gulp-watch это название плагина для Gulp, который отслеживает изменение файлов. Начиная с четвёртой
версии Gulp gulp-watch включен в основной пакет и не требует отдельной установки.
Начнём с простого - делаем функцию, которая при каждом изменении файла index.html в
папке app будет выводить предупреждение.
Как это выглядит в Gulp 4
// подтягиваем gulp , a gulp-watch можно не подтягивать
// - он влючен в Gulp начиная с 4-й версии
const gulp = require('gulp');
// пишем функцию, выводящую в лог предупреждение
function html() {
console.log("Кто-то отредактировал index.html!");
}
// пишем функцию, которая следит за файлом index.html
// можно назвать её просто watch, но в образовательных
// целях я назову её watchFiles
// зачем - будет видно чуть ниже - в exports
function watchFiles() {
gulp.watch("./app/index.html", html);
}
// Чтобы обращаться к нашим функция извне,
// например, из GitBash запишем exports
// Слева запишем названия видимые извне,
// а справа имена наших функций
exports.html = html;
exports.watch = watchFiles;
Чтобы запустить мониторинг пишем
gulp watch
[20:12:19] Using gulpfile ~\Desktop\Sites\heihei\gulpfile.js
[20:12:19] Starting 'watch'...
Теперь вносим изменения в файл index.html и сохраняем
[20:14:28] Starting 'html'...
Кто-то отредактировал index.html!
Как это выглядело в Gulp 3
// подтягиваем gulp и gulp-watch
const gulp = require('gulp')
watch = require('gulp-watch');
gulp.task('html', function() {
console.log("Кто-то отредактировал index.html!");
}
gulp.task('watch', function() {
watch('./app/index.html', function() {
gulp.start('html');
});
});
Создадим папку /app/styles/ , в которой будут файлы .css для разработки
Напишем функцию, которая будет собирать все файлы .css из этой папки,
обрабатывать их с помощью sass и соединять в один файл /css/style.css
Мы уже писали такую функцию выше, просто немного изменим её.
Добавим мониторинг файлов CSS gulp.watch("./app/styles/**/*.css", style);
function style() {
console.log("style is running!");
// 1.
return gulp.src('./app/styles/*.css')
// 2. pass that file through sass compiller
.pipe(sass())
// 3. where do I save the compiled CSS?
.pipe(gulp.dest('./css/style.css'))
}
function watchFiles() {
gulp.watch("./app/index.html", html);
gulp.watch("./app/styles/**/*.css", style);
}
Теперь как только мы отредактируем
Видеоуроки Gulp
Видео много весят, поэтому я выделил для них отдельную страницу - Видеоуроки Gulp
Ошибки
1
Ошибка при установке gulp
$ npm install gulp --save-dev
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\ao\Desktop\Sites\heihei\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\ao\Desktop\Sites\heihei\package.json'
npm WARN heihei No description
npm WARN heihei No repository field.
npm WARN heihei No README data
npm WARN heihei No license field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
+ gulp@4.0.2
added 314 packages from 217 contributors and audited 6490 packages in 30.037s
found 0 vulnerabilities
Скорее всего Вы не инициализировали npm. Нужно выполнить
npm init
Ввести нужные данные (либо просто нажимать Enter), после чего создастся файл package.json и можно будет вернуться к установке gulp
2
events.js:174 throw er; // Unhandled 'error' event
^
CssSyntaxError: postcss-simple-vars: C:\Users\ao\Desktop\Sites\travel-site\app\assets\styles\modules\_large-hero.css:5:2: Undefined variable $aMadeUpVariable2
Может быть вызвана, например, несуществующей переменной. Допустим Вы добавили цвет как переменную, но нигде её не задали.
3
Если Вы запустили Gulp
gulp
И получили что-то похожее
SyntaxError: Unexpected identifier
at Module._compile (internal/modules/cjs/loader.js:723:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at execute (C:\Users\ao\AppData\Roaming\npm\node_modules\gulp-cli\lib\versioned\^4.0.0\index.js:36:18)
at Liftoff.handleArguments (C:\Users\ao\AppData\Roaming\npm\node_modules\gulp-cli\index.js:201:24)
at Liftoff.execute (C:\Users\ao\AppData\Roaming\npm\node_modules\gulp-cli\node_modules\liftoff\index.js:201:12)
Скорее всего Вы пытаетесь использовать синтаксис ES2015+ и не установили babel или он работает но с ошибкой.
Здесь два выхода - разобраться и настроить либо перейти к старому синтаксису с require
Did you forget to signal async completion?
Эту ошибку можно устранить несколькими способами. Я пользуюсь следующим:
var gulp = require('gulp');
gulp.task('default', function(done) {
console.log("Gulp is running!");
done();
});
Article author: Andrei Olegovich
| IT | |
| SASS |
| I recommend our hosting beget.com |
| Write to info@aredel.com if you: |
| 1. Want to write an article for our site or translate an article into your native language. |
| 2. Want to place thematically relevant ads on the site. |
| 3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail |
| 4. Found a mistake, inaccuracy, bug, etc. on the site. ... ....... |
| 5. Articles can be shared on social media by clicking a network icon:
|