Налаштування Grunt для компіляції SASS/LESS у CSS

05.10.2015
Configuring Grunt for compiling SASS/LESS to CSS
Автор:

Препроцесори SASS і LESS суттєво спрощують фронт-енд розробку. Для їх автоматичної компіляції в CSS автоматично можна використовувати Grunt.js. Давайте подивимося, як це робити.

1. sudo apt-get install npm

Встановлюємо npm (менеджер пакетів для node.js)

2. sudo npm install -g grunt-cli

Встановлюємо grunt-cli — це дозволить запускати grunt у будь-якій директорії, якщо він там є (ця команда не встановлює Grunt).

3. npm init

Ініціалізуємо node проект у папці з темою (чи десь в іншому місці), ця команда запустить діалог, де ми:

  • даємо ім’я node проекту (можна дати ім’я теми);
  • вказуємо версію;
  • пишемо опис;
  • для entry point вказуємо Gruntfile.js;
  • test command, git repository, keywords можна залишити пустими;
  • author — вказуєте себе, або залишаєте пустим;
  • вказуєте ліцензію (BSD-2-Clause за замовчуванням);

Далі вас запитають, чи всі дані введені коректно, якщо так — натискаємо Enter.

Згенерується файл package.json, у якому зберігаються налаштування проекту.

4. npm install grunt --save-dev

встановлюємо Grunt у папку з темою

npm install grunt-contrib-watch --save-dev

встановлюємо grunt-contrib-watch, цей пакет відслідковуватиме зміни у Sass/Less файлах.

Далі, залежно від того, потрібна компіляція sass чи less, встановлюємо локально відповідні модулі:

для Sass встановлюємо:

npm install grunt-sass --save-dev

або

npm install grunt-contrib-sass --save-dev

grunt-sass використовує компілятор на C++, завдяки чому компіляція відбувається дуже швидко (0.9с, 6000+ рядків у css файлі), grunt-contrib-sass вважається більш стабільним (компіляція займає 4с, 6000+ рядків у css файлі).

для Less встановлюємо:

npm install grunt-contrib-less --save-dev - для less

Всі встановлені пакети пропишуться у залежностях в файлі package.json.

5. Далі створюємо Gruntfile.js

Ось приклад Gruntfile.js для Sass:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    sass: {
      dist: {
        options: {
          sourcemap: false,
          compress: false,
          yuicompress: false,
          style: 'expanded',
        },
        files: {
          'css/style.css' : 'sass/style.scss'
        }
      },
    },
    watch: {
      css: {
        files: '**/*.scss',
        tasks: ['sass']
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.registerTask('default',['watch']);
}



Ось приклад Gruntfile.js для Less:

module.exports = function(grunt) {
  require('jit-grunt')(grunt);

  grunt.initConfig({
    less: {
      development: {
        options: {
          compress: false,
          yuicompress: false,
          optimization: 2
        },
        files: {
          "css/style.css": "less/style.less"
        }
      }
    },
    watch: {
      styles: {
        files: ['less/**/*.less'],
        tasks: ['less']
      }
    }
  });

  grunt.registerTask('default', ['less', 'watch']);
};



Пояснення щодо конфігурацій:

sass: { та less: {, де sass та less — назви задач;

'css/style.css' : 'sass/style.scss' та "css/style.css": "less/style.less" — шлях до CSS-файлу, куди будуть компілюватися зміни та шлях до Sass/Less файлу, який буде компілюватися;

files: '**/*.scss', files: ['less/**/*.less'] — вказуємо, які файли відслідковувати;

tasks: ['sass'], tasks: ['less'] — при зміні файлів запускаємо вказану задачу;

grunt.registerTask('default',['watch']); — реєструємо задачу;

grunt.loadNpmTasks('grunt-contrib-sass'), grunt.loadNpmTasks('grunt-contrib-watch') — підключаємо модулі, у прикладі з less використано jit-grunt (модуль, який оптимізує підвантаження модулів), тому вказаних рядків тут немає.

6. Все готово, заходимо в папку, куди ми встановили Grunt і запускаємо його:

Якщо отримали помилку типу “/usr/bin/env: node: No such file or directory” — sudo ln -s /usr/bin/nodejs /usr/bin/node.

Якщо отримали помилку Друпала “Segmentation fault” — видаліть всі файли з папки node_modules, які мають розширення .info - find . -name "*.info" -type f -delete.

7. Якщо у вас Grunt уже налаштований, і ви його просто хочете запустити

— за потреби виконайте пункти 1, 2 і перейдіть до пункту 6.

Корисні ресурси

http://gruntjs.com/getting-started

https://github.com/sindresorhus/grunt-sass (швидкий плагін для компіляції sass)

https://github.com/gruntjs/grunt-contrib-sass (плагін для компіляції sass)

https://github.com/gruntjs/grunt-contrib-less (плагін для less)

https://www.npmjs.com/package/jit-grunt (плагін для оптимізації завантаження плагінів)

https://github.com/gruntjs/grunt-contrib-coffee (плагін для компіляції coffee script у js)

https://github.com/esteinborn/bootstrap-sass-grunt (Bootstrap SASS для grunt)

http://stackoverflow.com/questions/26320901/cannot-install-nodejs-usr-bin-env-node-no-such-file-or-directory (про помилку /usr/bin/env: node: No such file or directory)

https://www.drupal.org/node/2309023 (про помилку Segmentation Fault)

Голосів: 7 Рейтинг: 4.4

Також по темі

1

Яким би майстром ти не був, а вивчати досвід інших потрібно. Тож розгляньмо 10 цікавих вебсайтів брендів, які віддали перевагу Друпалу.

2

Соцмережі та інтернет-торгівля — це дві сили, які керують інтернетом. Що ми отримаємо, якщо об'єднаємо їх? Суперсилу! ;) Комерційні сайти з інтеграцію в соцмережі — один з найновіших, але уже дуже...

3

Чому найкращим способом представлення документів на Drupal-сайті вважається формат Portable Document Format (PDF), поради щодо роботи з ним, а також щодо налаштування власного Drupal-сайту - все...

4

Простий сайт на Drupal 7 можна створити, використовуючи лише адміністративний інтерфейс і простий текстовий редактор, але коли справа доходить до більш серйозного проекту, не обійтись без...

5

Drupal пропонує цілий ряд можливостей для підвищення зручності та надійності сайту. Але не забувайте про один з найважливіших аспектів роботи Drupal-сайту: необхідність регулярно робити надійні...

Subscribe to our blog updates