use grunt, luke

45
USE GRUNT, LUKE Глеб Поспелов, Дневник.ру IT Life {JavaScript} 2014

Upload: nerina

Post on 23-Feb-2016

78 views

Category:

Documents


0 download

DESCRIPTION

USE GRUNT, LUKE. Глеб Поспелов , Дневник.ру IT Life { JavaScript} 2014. Так что такое Grunt?. Grunt – это. Grunt – это. не минификатор JavaScript. Grunt – это. не минификатор JavaScript не синтаксический анализатор CSS. Grunt – это. не минификатор JavaScript - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: USE GRUNT, LUKE

USE GRUNT, LUKEГлеб Поспелов, Дневник.ру

IT Life {JavaScript} 2014

Page 2: USE GRUNT, LUKE

Так что такое Grunt?

Page 3: USE GRUNT, LUKE

Grunt – это

Page 4: USE GRUNT, LUKE

Grunt – это

• не минификатор JavaScript

Page 5: USE GRUNT, LUKE

Grunt – это

• не минификатор JavaScript• не синтаксический анализатор CSS

Page 6: USE GRUNT, LUKE

Grunt – это

• не минификатор JavaScript• не синтаксический анализатор CSS

• не сборщик Jade

Page 7: USE GRUNT, LUKE

Grunt – это

JavaScript Task Runner

Page 8: USE GRUNT, LUKE

В чем преимущества Grunt?

Page 9: USE GRUNT, LUKE

1. JavaScript

Page 10: USE GRUNT, LUKE

Все, что нужно для начала использования:

Page 11: USE GRUNT, LUKE

Устанавливается как обычный npm packageЛибо через консоль

codefo:~ codefo$ npm install grunt grunt-cli --save-dev

Page 12: USE GRUNT, LUKE

Устанавливается как обычный npm packageЛибо через консоль

codefo:~ codefo$ npm install grunt grunt-cli --save-dev

Либо через package.json

{ "name": "your-project-name", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.4", "grunt-cli": "~0.1.13" } }

Page 13: USE GRUNT, LUKE

Вместо XML-soup чистый JavaScript

<target name="js-compile-all" description="Compile JavaScript files with Closure" unless="skip-js-compile"> <echo>Compiling JS files in ${input.scripts.dir} in closure...</echo> <apply executable="java" dest="${output.scripts.dir}"> <arg value="-jar"/> <arg path="${jar.lib.dir}/closure-compiler.jar"/> <arg line="--js"/> <srcfile/> <arg line="--js_output_file"/> <targetfile/> <fileset dir="${output.scripts.dir}" includes="**/*.js" /> <mapper type="glob" from="*.js" to="*assets/main.min.js"/> </apply> <echo>Finished compiling JS files</echo></target>

Page 14: USE GRUNT, LUKE

Вместо XML-soup чистый JavaScript

grunt.initConfig({ uglify: { main: { src: '**/*.js', dest: 'assets/main.min.js' } }});

Page 15: USE GRUNT, LUKE

2. Простота

Page 16: USE GRUNT, LUKE

Gruntfile.js

Внутри себя он содержит:• Функцию-обертку• Конфигурацию проекта и задач• Загрузку плагинов• Custom tasks

Page 17: USE GRUNT, LUKE

Gruntfile.jsmodule.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. grunt.loadNpmTasks('grunt-contrib-uglify'); // Default task(s). grunt.registerTask('default', ['uglify']); };

Page 18: USE GRUNT, LUKE

Задачи

• Все задачи имеют общую структуру (Имеют атрибуты options, src, dest)

• В задачах могут быть цели (подзадачи)• В качестве значения атрибутов src и dest можно указывать

как отдельные имена файлов, так списки имен, пользуясь при этом шаблонами

• Задачи можно объединять с другими задачами

Page 19: USE GRUNT, LUKE

3. Расширяемость

Page 20: USE GRUNT, LUKE

Plugins

Grunt всего лишь предоставляет простое API для запуска и остановки задач, все существенные действия реализуются

с помощью плагинов.

• На момент подготовки презентации в npm registy было более 2500 плагинов для Grunt• Более 25 из них поддерживаются командой разработчиков.

Page 21: USE GRUNT, LUKE

Написать свою задачу до безобразия просто

grunt.registerTask('custom', 'My "custom" task description.', function() { grunt.log.writeln('Currently running the "custom" task.');});

Page 22: USE GRUNT, LUKE

Создать собственный плагин не намного труднее

codefo:~ codefo$ npm install -g grunt-init

codefo:~ codefo$ git clone git://github.com/gruntjs/grunt-init-gruntplugin.git ~/.grunt-init/gruntplugin

codefo:~ codefo$ grunt-init gruntplugin

Page 23: USE GRUNT, LUKE

Кто уже использует Grunt?

Page 24: USE GRUNT, LUKE
Page 25: USE GRUNT, LUKE
Page 26: USE GRUNT, LUKE
Page 27: USE GRUNT, LUKE
Page 28: USE GRUNT, LUKE
Page 29: USE GRUNT, LUKE
Page 30: USE GRUNT, LUKE
Page 31: USE GRUNT, LUKE
Page 32: USE GRUNT, LUKE
Page 33: USE GRUNT, LUKE

Grunt в Дневнике

Page 34: USE GRUNT, LUKE

Предыстория

Нам необходима была система для сборки и минификации JavaScript и CSS

Page 35: USE GRUNT, LUKE

Предыстория

Мы пробовали использовать WebOptimization Framework, Google Closure Compiler,

YUI Compressor и даже…

Page 36: USE GRUNT, LUKE

Предыстория

Page 37: USE GRUNT, LUKE

Предыстория

Основным недостатком была необходимость использования дополнительного ПО и лишние

«телодвижения» со стороны разработчика

Page 38: USE GRUNT, LUKE

Предыстория

Плюс в будущем хотелось иметь возможность перейти на модульную архитектуру и покрыть часть кода тестами, не

изменяя при этом систему сборки

Page 39: USE GRUNT, LUKE

Как теперь все работает

• Сейчас мы используем 11 плагинов (clean, copy, concat, csshint, jshint, cssjoin, requirejs, cssmin, uglify, qunit, hash)

• У нас зарегистрировано две задачи: check и deploy• Установлен собственный npm репозиторий• Запуск проверки кода на TeamCity после каждого

изменения в VCS

Page 40: USE GRUNT, LUKE

Problems?

• Grunt плохо дружит с потоками ввода\вывода Windows• Очень редко, но случаются какие-то затыки при

скачивании пакетов с локального npm репозитория• Gruntfile стал слишком большой

Page 41: USE GRUNT, LUKE

А что на счет Gulp?

Page 42: USE GRUNT, LUKE

Отличия и недостаки:

• Gulp – это потоковая система сборки• Относительно небольшой возраст (разработка началась в июле 2013 года)

• Меньше комьюнити, а следовательно, меньше плагинов и поддержки

Page 43: USE GRUNT, LUKE

Преимущества:

• Императивный подход• Время работы• Node.js-way

Page 44: USE GRUNT, LUKE

Any questions?

Page 45: USE GRUNT, LUKE

Спасибо за внимание!

[email protected]://facebook.com/codefo