четверг, 25 июля 2013 г.

Grunt

Grunt - javascript task runner. Утилита сборки для джаваскрипта, ака ant для Java.

Разделена на три разных node модуля:
1. grunt - модуль, который нужно устанавливать локально в проект $ npm i grunt. Именно в нем содержится код и логика, которые запускают таски, загружают плагины.
2. grunt-cli - модуль, который устанавливается глобально $ npm i -g grunt, его задача состоит в том, чтобы мы могли выполнить таск в любом месте проекта - он просто подымается по каталогу вверх и находит установленный grunt в папке node_modules и запускает его.
3. grunt-init - модуль, который также нужно установить глобально $ npm i -g grunt-init / Это утилита "строительные леса", которая вынесла таск init гранта в отдельный модуль, и позволяет пользуясь шаблонами, которые размещаются ~/.grunt-init/*(они устанавливаются тоже модулями npm как плагины гранта, но как-то попадают туда), создавать разные заготовки заготовки. Этот модуль планируется быть замененным модулем Yo(http://yeoman.io/).


И так мы можем пользоваться готовыми тасками ядра или создавать собственные.
Таски ядра все вынесены в отдельные плагины гранта(npm модули). Вот список существующих на данный момент тасков:

Чтобы оживить грант в нашем проекте нам нужно в нем разместить файл Gruntfile.js. При этом наш проект должен быть правильным npm модулем и в его зависимостях должен находиться grunt. Вот пример файла пакета такого модуля package.json:
{
  "name": "my-project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-nodeunit": "~0.2.0",
    "grunt-contrib-uglify": "~0.2.2"
  }
}

Можем сразу заметить, что мы стразу также подвязываем кор-таски(отдельные npm-модули) к зависимостям модуля.
Теперь сделав
npm install

Мы обеспечим в нашем проекте все установленные модули необходимы для гранта, на все эти модули зависимости используются сдесь Gruntfile.js.

Впринципе мы можем сделать все это по другому:
$ npm init
$ npm install grunt --save-dev
$ npm install grunt-contrib-jshint --save-dev
$ npm install grunt-contrib-nodeunit --save-dev
$ npm install grunt-contrib-uglify --save-dev
Так мы получим все депенденси в package.json.
Кстати также большиство шаблонов  grunt-init устанавливают заполненный package.json.


Вот пример Gruntfile.js:
module.exports = function(grunt) {

  // Project configuration.
  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'
      }
    }
  });

  // Load the plugin that provides the "uglify" task. 
  // * из установленных модулей нашего проекта(node_modules)
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // Default task(s).
  grunt.registerTask('default', ['uglify']);

};

Комментариев нет:

Отправить комментарий