Открыть меню    

Введение в Grunt, настройка проекта и запуск задач

GRUNT GRUNT - это система автоматизации (например, минимизация и конкатенация файлов, проверка ошибок, удаление логов, отслеживание изменений проекта, компиляция SASS, LESS и т.д.).

Официальная страница gruntjs.com

Зачем использовать Grunt?

Экосистема Grunt огромна и растет с каждым днем. Сотня плагинов на выбор; вы можете использовать Grunt, чтобы автоматизировать практически все что угодно и с минимальными усилиями. При желании Вы можете написать и опубликовать свой плагин для Grunt. Быстрый старт (http://gruntjs.com/getting-started).

Зачем использовать task runner (таск-менеджер)?

Одно слово – автоматизация. Ваша работа уменьшится при выполнении таких задач как минификация, компиляция, тестирование и т.д. Вам будет легче делать свою работу. После того как вы настроите его через Gruntfile (http://gruntjs.com/sample-gruntfile) все вышеописанные задачи будут сделаны без каких-либо усилий с вашей стороны.

Доступные плагины GRUNT

Доступные плагины GRUNT, на которые стоит обратить внимание:

  • Плагин grunt-contrib-jshint(jshint) - проверяет js-код.
  • Плагин grunt-contrib-concat(concat) - это плагин, который соединяет файлы одного типа (css,js) в один.
  • Плагин grunt-contrib-uglify (uglify) - минификатор, используется для минимизации js-файлов.
  • Плагин grunt-contrib-cssmin (cssmin) - минификатор CSS.
  • Плагин grunt-contrib-sass (sass) - преобразуем SASS в CSS.
  • Плагин grunt-contrib-watch (watch) - отслеживание изменений в файлах.
  • Плагин grunt-contrib-imagemin (imagemin) - оптимизация изображений.
  • Плагин grunt-autoprefixer (autoprefixer) - парсит CSS и добавляет вендорные префиксы, используя данные с Can I Use.
  • grunt-express используем для Livereload
  • https://github.com/gruntjs/grunt-contrib-cssmin

Grunt и его плагины устанавливаются и управляются посредством npm (менеджера пакетов Node.js). Для справки (освежить в памяти): Gruntfile пример - sample-gruntfile, настраиваем задачи - configuring-tasks.

Устанавливаем grunt:
npm install -g grunt-cli

Это позволит находить команду grunt по системному пути и запускать из любого каталога.

Работаем с существующим проектом

  • 1. Перейдите в корневой каталог проекта
  • 2. Установите зависимости проекта с помощью npm install
  • 3. Запустить Grunt с grunt

Использование, опции, возможные задачи для Grunt можно узнать через команду
grunt –help.

Подготовка проекта

package.json: этот файл используется npm, чтобы сохранить метаданные проекта при публикации проекта как npm модуля. devDependencies (зависимости) перечисляются также в этом файле.

Gruntfile: Этот файл называется Gruntfile.js и используется, чтобы настроить или определить задачи и загрузить Grunt плагины. Когда в документации упоминается Gruntfile, речь идет о Gruntfile.js или Gruntfile.coffee.

package.json

Создать package.json можно:

  • 1. Командой npm init
  • 2. Начните с примером ниже и расширьте его, следуя спецификации
{
  "name": "my-project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.5",
    "grunt-contrib-jshint": "~0.10.0",
    "grunt-contrib-nodeunit": "~0.4.1",
    "grunt-contrib-uglify": "~0.5.0"
  }
}

В файле package.json имеется свойство scripts, в котором можно определить скрипты. Эти скрипты помогут автоматизировать некоторые процессы. Названием свойства в объекте scripts будет название скрипта, в качестве значение укажем команду, которую мы вводили в терминале. В нашем случае транспилируем код помощи babel: "babel es2015.js -o es5.js". Далее в терминале достаточно будет ввести команду:
npm run build
для выполнение команды babel es2015.js -o es5.js.

"scripts": {
    "build": "babel es2015.js -o es5.js"
}

Установка Grunt и gruntplugins (плагинов/зависимостей)

Самый простой способ добавить Grunt и gruntplugins к существующему package.json:
npm install <module> --save-dev.

Например, это позволит установить последнюю версию Grunt в ваш проект с добавлением его в devDependencies:
npm install grunt --save-dev

Устанавливаем модуль JSHint:
npm install grunt-contrib-jshint --save-dev

Установить все зависимости, уже перечисленные в файле package.json, можно командой
npm install.

Gruntfile

Gruntfile состоит из следующих частей:

  • Функция-обертка
  • Проект и настройка задач
  • Загрузка плагинов и задач
  • Пользовательские задачи

Пример Gruntfile

module.exports = function(grunt) {

  // Настройки проекта
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    }
  });

  // Загрузка плагина, который обеспечивает задачу "uglify"
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // Задача(и) по умолчанию
  grunt.registerTask('default', ['uglify']);

};

Функция-обертка

Каждый Gruntfile использует этот базовый формат; весь ваш код должен быть определен внутри этой функции:

module.exports = function(grunt) {
  // Do grunt-related things in here
};

Проект и настройка задачи

Большинство Grunt задач полагаются на данные, которые передаются как объект методу grunt.initConfig (grunt.initconfig). Пример настройки задачи uglify, настройки этой задачи задаются в одноименном свойстве.

// Настройки проекта
grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  uglify: {
    options: {
      banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
    },
    build: {
      src: 'src/<%= pkg.name %>.js',
      dest: 'build/<%= pkg.name %>.min.js'
    }
  }
});

Обратите внимание на использование данных из JSON-файла.

Загрузка плагинов и задач

Большинство задач (минификация, компиляция, тестирование, анализ кода) доступны как плагины grunt. После того как плагин указан в package.json как зависимость и установлен через npm install, его нужно подключить внутри вашего Gruntfile простой командой:

// Загрузка плагина, который обеспечивает задачу "uglify"
grunt.loadNpmTasks('grunt-contrib-uglify');

Пользовательские задачи

Вы можете настроить Grunt, чтобы запускать одну или несколько задач по умолчанию, определив задачу default. В следующем примере команда grunt запустит задачу uglify (что также равнозначно командам grunt uglify и grunt default). Любое количество задач можно указать в массиве:

// // Задача(и) по умолчанию
grunt.registerTask('default', ['uglify']);

Если вашему проекту требуются задачи не предусмотренные плагином Grunt, вы можете определить свою задачу прямо внутри Gruntfile.

Полезные ссылки:
Статья - Grunt 0.4: система сборки для фронтенд-разработчиков
Статья - Grunt для тех, кто считает штуки вроде него странными и сложными
На youtube - Grunt.js - Автоматизация для самых ленивых
Статья - Getting started with Grunt

Комментарии к статье