Сборка CSS, SCSS и SASS с помощью node-sass

Как собрать стили CSS, SCSS и SASS при помощи node-sass 

Обычно сборку SCSS и SASS делают с помощью специальных сборщиков Webpack или Gulp. Да, эти инструменты хороши, но когда ты делаешь простой сайт или лендинг, то настройка этих самых сборщиков может занять очень много времени. Я покажу как за несколько минут можно настроить сборку и минимизацию стилей при помощи пакета node-sass. Для выполнения всех приведенных действий вам потребуется установленный nodejs.

Немного о SCSS и SASS

SCSS - это по сути тот же CSS только с возможностью использовать переменные, как в PHP $имя_переменной. А SASS(Syntactically Awesome Stylesheets) - это SCSS с упрощенным синткасисом без фигурных скобок и точек с запятой в конце каждой строки. Оба языка позволяют использовать переменные в таблицах стилей, а так же импортировтаь и объединять стили между собой. Хотя, на данный момент CSS уже поддерживает переменные нативно, еще не все браузеры их поддерживают(привет IE!). 

Как правило, в более сложных веб-приложениях файлы стилей разделяются на исходники и сборки. Исходники стилей принято разделять на отдельные файлы. Например, стили для таблиц в одном файле, стили списков в другом и так далее. Потом это все объединяется с помощью директивы @import в один главный sass файл, который обрабатывается препроцессором в обычный CSS.

Если вы пользуетесь CSS фреймворками, такими как bootstrap или bulma, с помощью SASS вы сможете легко кастомизировать их. 

Пример стилей на SCSS:

$base-text: #343434;
$gray-text: #BBB;

p {
  color: $base-text;
}

p.gray {
  color: $gray-text;
}

Пример стилей на SASS:

$base-text: #343434
$gray-text: #BBB

p
  color: $base-text

p.gray
  color: $gray-text

Настройка и подготовка проекта

Инициализация проекта и установка node-sass

mkdir node-sass
cd node-sass
npm init -y
npm i node-sass --save-dev

После завершания установки в папке должны появиться следующие файлы:

ls
node_modules  package.json  package-lock.json

Теперь надо создать папки для исходников, где будут лежать SASS-стили и папку, куда будут складываться собранные стили. 

mkdir -p src/sass
mkdir -p public/build

 В директории src/sass будут лежать исходники, а в public/build собранные стили.

Установка Bootstrap и создание таблиц стилей

В качестве примера я буду использовать CSS фреймворк Bootstrap 4 и несколько собственных таблиц силей.

Для начала надо установить bootstrap:

npm i bootstrap

Теперь можно создать несколько таблиц стилей и подключить Bootstrap в наш проект. Я создам один главный файл theme.sass, импортирую в него bootstrap и добавлю несколько кастомных стилей.

Вот что получилось:

@import 'bootstrap/scss/bootstrap'

$main-color: #4c4c4c
$main-bg: #fafafa

body
  background-color: $main-bg

p
  color: $main-color

Строка @import 'bootstrap/scss/bootstrap' означает импорт файла корень_проекта/node_modules/bootstrap/scss/bootstrap.scss (расширение файла можно не указывать). В данном случае импортируются все стили библиотеки bootstrap. Но можно импортировать их и частями, если открыть папку node_modules/bootstrap/scss, то вы увидите много файлов scss. Например, если хотите использовать только сетку, то надо импортировать файл bootstrap-grid.scss. 

Имя импортируемого файла может быть относительно текущего файла, например @import './lists' либо относительно директории node_modules, как в моем примере. Если вы указываете путь относительно node_modules надо будет добавить опцию --include-path node_modules для команды npx node-sass.

Сборка стилей

Теперь мы можем собрать наши стили. Мы будем использовать ранее установленный пакет node-sass. Для запуска бинарников из npm пакетов надо использовать консольную команду npx __название_пакета__. В нашем случае запуск node-sass будет выполняться командой npx node-sass.

Запускаем сборку:

npx node-sass \
--include-path node_modules \
--output-style compressed \
src/sass/theme.sass > public/build/theme.css

Если команда выполнилась без ошибок, то должен появиться файл public/build/theme.css - это и есть наш собранный и минимизированный CSS, который теперь можно подключить к html странице.

Во время разработки сайта, чтобы каждый раз не выполнять команду для сборки стилей можно использовать опцию --watch. Тогда node-sass будет отслеживать изменения в исходниках стилей и автоматически пересобирать CSS.

Добавление команд в package.json

Синтаксис некоторых комманд получается довольно громоздкий. Чтобы каждый раз не воодить их полностью, им придумывают короткие alias'ы и сохраняют в файл package.json, в раздел scripts.

{
  "name": "node_sass_example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "sass": "npx node-sass --include-path node_modules --output-style compressed src/sass/theme.sass > public/build/theme.css",
    "sass:watch": "npx node-sass --watch --include-path node_modules --output-style compressed src/sass/theme.sass > public/build/theme.css",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bootstrap": "^4.0.0"
  },
  "devDependencies": {
    "node-sass": "^4.7.2"
  }
}

После сохранения команд в package.json сборку можно выполнить командой npm run sass или npm run sass:watch чтобы css стили автоматически пересобиралились при изменении sass/scss исходников.