SlideShare a Scribd company logo
1 of 33
Download to read offline
19:55
GRUNT.JS
ДОЛОЙ РУТИННЫЕ ЗАДАЧИ
ДВА СЛОВА О СЕБЕ
Дмитрий Кунин
ведущий разработчик AT-Consulting
энтузиаст javascript
жутко ленивый парень
ЧТО ТАКОЕ GRUNT.JS?
Система автоматизации, которая может практически все.
КАК ЭТА ШТУКА
РАБОТАЕТ?
node.js
npm
package.json
Gruntfile.js
КТО ИСПОЛЬЗУЕТ
ЧТО ВЫ НЕНАВИДИТЕ
ДЕЛАТЬ?
ЧТО ВЫ ЗАБЫВАЕТЕ
ДЕЛАТЬ?
УСТАНОВКА РАЗ И НАВСЕГДА
npm install -g grunt-cli
УСТАНОВКА В ПРОЕКТ
npm install grunt --save-dev
УСТАНОВКА И НАСТРОЙКА
ШАБЛОНИЗАТОРА
npm install -g grunt-init
git clone git@github.com:gruntjs/grunt-init-TEMPLATE.git ~/.grunt-ini
TEMPLATES:
grunt-init-commonjs
grunt-init-gruntfile
grunt-init-gruntplugin
grunt-init-jquery
grunt-init-node
ЗАГРУЗКА/УСТАНОВКА GRUNTFILE
grunt-init grunt-init-gruntfile || grunt-init gruntfile
СТРУКТУРА GRUNTFILE
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.initConfig({
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint']
}
});
grunt.registerTask('default', ['jshint', 'concat', 'uglify']);
};
КОММАНДЫ GRUNT
grunt.initConfig
grunt.file.readJSON('package.json')
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default',["..."])
grunt.log.writeln("...");
grunt.log.error("...");
grunt.task.requires('foo');
grunt.event.on('watch')
grunt.template.today("yyyy-mm-dd");
grunt.template.date(847602000000, 'yyyy-mm-dd')
УСТАНОВКА ПЛАГИНА
npm install grunt-contrib-concat
npm install grunt-contrib-concat --save
npm install grunt-contrib-concat --save-dev
grunt.loadNpmTasks('grunt-contrib-watch');
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint']
}
PACKAGE.JSON
"author": "authorName",
"name": "projectName",
"version": "0.0.1",
"devDependencies" : {
"grunt": ">= 0.4",
"grunt-contrib-watch": "~0.3.1",
"grunt-contrib-cssmin": ">=0.5.0",
"grunt-contrib-uglify": ">=0.2.0",
"grunt-contrib-concat": ">=0.1.3"
}
===
АЛЬТЕРНАТИВНАЯ ЗАГРУЗКА
ПЛАГИНОВ
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-stylus');
grunt.loadNpmTasks('grunt-contrib-testing');
grunt.loadNpmTasks('grunt-contrib-pixel-perfect');
grunt.loadNpmTasks('grunt-shedevr');
npm install matchdep
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks)
ЗАПУСК ЗАДАЧ
grunt build
grunt build:test
grunt connect:smth
grunt.registerTask('update', function(message){
globalConfig.message = message;
grunt.task.run('bgShell:gitCi');
});
bgShell: {
_defaults: {
bg: false
},
gitCi: {
cmd: 'git commit -am "<%= globalConfig.message %>"',
}
},
ОБЪЕДИНЕНИЕ НЕСКОЛЬКИХ ЗАДАЧ
grunt.registerTask('default', [
'jshint',
'concat',
'uglify'
]);
ПОПУЛЯРНЫЕ
ЗАДАЧИ И
ПЛАГИНЫ
ПРЕПРОЦЕССИНГ HTML
grunt-contrib-jade
grunt-contrib-haml
grunt-slim
npm install grunt-contrib-jade --save-dev
npm install grunt-contrib-haml --save-dev
npm install grunt-slim --save-dev
GRUNT-CONTRIB-JADE
jade: {
dist: [
{
src: ['views/*.jade'],
dest: '/'
}
],
test: [
{
src: ['test/*.jade'],
dest: '/test'
}
]
}
ПРЕПРОЦЕССИНГ СSS
stylus
less
sass
npm install grunt-contrib-stylus --save-dev
npm install grunt-contrib-less --save-dev
npm install grunt-contrib-sass --save-dev
ПРИМЕРНАЯ НАСТРОЙКА CSS
ПРЕПРОЦЕССОРА
sass: {
dist: {
'main.css': 'main.scss'
}
}
ПРЕПРОЦЕССИНГ/LINTING JS
Coffescript
JSHint
npm install grunt-contrib-jshint --save-dev
npm install grunt-contrib-coffee --save-dev
JSHINT
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: [
'Gruntfile.js',
'app/scripts/{,*/}*.js',
'!app/scripts/vendor/*',
'test/spec/{,*/}*.js'
]
}
{
"node": true,
"bitwise": true,
"camelcase": true,
"curly": true,
"eqeqeq": true,
"immed": true,
"indent": 4,
"latedef": true,
"newcap": true,
"jquery": true
}
UNIT TESTING
jasmine
npm install grunt-contrib-jasmine --save-dev
CONCATINATION/UGLIFY
usemin
uglify
concat
npm install grunt-contrib-usemin --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-uglify --save-dev
USEMIN
prepeareUsemin -> concat/uglify-> usemin
<!-- build:css css/main.css -->
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/moon.css">
<link rel="stylesheet" href="css/zenburn.css">
<!-- endbuild -- >
<!-- build:js js/app.js -->
<script src="js/reveal.js"></script>
<script src="js/init.js"></script">
<!-- endbuild -- >
ОЧИСТКА КОДА
debug/console cleanup
npm install grunt-groundskeeper --save-dev
npm install grunt-remove-logging --save-dev
РАЗНОЕ
Открытие страницы
Удаление временных папок
Архивация
Выгрузка на фтп
Бампинг package.json файла
CDN замена скриптов
npm install grunt-open --save-dev
npm install grunt-contrib-clean --save-dev
npm install grunt-contrib-compress --save-dev
npm install grunt-ftp-deploy --save-dev
npm install grunt-bumpup --save-dev
npm install grunt-google-cdn --save-dev
ОБЪЕДИНЕНИЕ
ВСЕГО УКАЗАННОГО В СВЯЗКУ
watch
npm install grunt-contrib-watch --save-dev
НАСТРОЙКА WATCH
watch: {
scripts: {
files: [
"public/**/*.js",
"app/assets/stylesheets/stylus/*.styl"
],
tasks:["stylus"],
options: {
livereload: true
},
}
}
ГЛАВНЫЙ РЕСУРС
HTTP://GRUNTJS.COM/
ФИНАЛЬНЫЙ ХИНТ
~/.bash_profile
# Установка grunt плагина с сохранением в dev зависимости
function gi() {
npm install --save-dev grunt-"$@"
}
# Установка grunt-contrib плагина с сохранением в dev зависимости
function gci() {
npm install --save-dev grunt-contrib-"$@"
}
ВОПРОСЫ?
СПАСИБО ЗА ВНИМАНИЕ!
Дмитрий Кунин
brainstorage.me/dkunin
info@dkunin.ru

More Related Content

What's hot

Unit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsUnit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsGabrielComas2
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発祐司 伊藤
 
Node.js moduly a testovanie
Node.js moduly a testovanieNode.js moduly a testovanie
Node.js moduly a testovanieharcek
 
Task Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.jsTask Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.js3rfan
 
Docker for localhost development (on Serbian)
Docker for localhost development (on Serbian)Docker for localhost development (on Serbian)
Docker for localhost development (on Serbian)Milan Urukalo
 
透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)Justin Wu
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)dynamis
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebSebastian Springer
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаяsheplyakov
 
Node.js course باللغة العربية
Node.js course باللغة العربيةNode.js course باللغة العربية
Node.js course باللغة العربيةanees abu-hmaid
 
Progressive Mobile Web Apps
Progressive Mobile Web AppsProgressive Mobile Web Apps
Progressive Mobile Web Appsdynamis
 
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"Dev2Dev
 
Modern Mobile Web Apps
Modern Mobile Web AppsModern Mobile Web Apps
Modern Mobile Web Appsdynamis
 
Affär - inte teknik
Affär - inte teknikAffär - inte teknik
Affär - inte teknikPer Åström
 

What's hot (20)

Unit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJsUnit Testing con Jest + Enzime para ReactJs
Unit Testing con Jest + Enzime para ReactJs
 
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
 
Node.js moduly a testovanie
Node.js moduly a testovanieNode.js moduly a testovanie
Node.js moduly a testovanie
 
Task Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.jsTask Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.js
 
Docker for localhost development (on Serbian)
Docker for localhost development (on Serbian)Docker for localhost development (on Serbian)
Docker for localhost development (on Serbian)
 
Automation build
Automation buildAutomation build
Automation build
 
透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)
 
Rubyslava2102
Rubyslava2102Rubyslava2102
Rubyslava2102
 
Slay
SlaySlay
Slay
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
EcmaScript Harmony
EcmaScript HarmonyEcmaScript Harmony
EcmaScript Harmony
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленная
 
Ninja dojo
Ninja dojoNinja dojo
Ninja dojo
 
Node.js course باللغة العربية
Node.js course باللغة العربيةNode.js course باللغة العربية
Node.js course باللغة العربية
 
Progressive Mobile Web Apps
Progressive Mobile Web AppsProgressive Mobile Web Apps
Progressive Mobile Web Apps
 
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
 
Modern Mobile Web Apps
Modern Mobile Web AppsModern Mobile Web Apps
Modern Mobile Web Apps
 
Affär - inte teknik
Affär - inte teknikAffär - inte teknik
Affär - inte teknik
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 

Viewers also liked

Preprocessor Workflow with Grunt
Preprocessor Workflow with GruntPreprocessor Workflow with Grunt
Preprocessor Workflow with GruntVlad Filippov
 
Základní nástroje pro automatizaci
Základní nástroje pro automatizaciZákladní nástroje pro automatizaci
Základní nástroje pro automatizaciTomáš Musiol
 
Grunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierGrunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierErick Brito
 
第一次分享
第一次分享第一次分享
第一次分享cyrustsai
 
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์Nupol
 
Canh tac tren dat doc 3
Canh tac tren dat doc 3Canh tac tren dat doc 3
Canh tac tren dat doc 3cinnamonVY
 
Tone Excel (Malay)
Tone Excel (Malay)Tone Excel (Malay)
Tone Excel (Malay)Vun Chee Vui
 
Elements of a plot diagram
Elements of a plot diagramElements of a plot diagram
Elements of a plot diagramBISS
 
Ardeninlancasterestates 101014031023-phpapp01
Ardeninlancasterestates 101014031023-phpapp01Ardeninlancasterestates 101014031023-phpapp01
Ardeninlancasterestates 101014031023-phpapp01dryxjorta
 
BCI Eurobib Schulz Speyer Library Tables Catalog
BCI Eurobib Schulz Speyer Library Tables CatalogBCI Eurobib Schulz Speyer Library Tables Catalog
BCI Eurobib Schulz Speyer Library Tables CatalogBCIEurobib
 
2009 Hta Generic Presentation
2009 Hta Generic Presentation2009 Hta Generic Presentation
2009 Hta Generic PresentationSteveNewman
 
PRoF @ AAL 2012 Eindhoven - living lab or not ?
PRoF @ AAL 2012 Eindhoven - living lab or not ?PRoF @ AAL 2012 Eindhoven - living lab or not ?
PRoF @ AAL 2012 Eindhoven - living lab or not ?Piet Verhoeve
 

Viewers also liked (20)

Preprocessor Workflow with Grunt
Preprocessor Workflow with GruntPreprocessor Workflow with Grunt
Preprocessor Workflow with Grunt
 
Davky jsou-proste-super
Davky jsou-proste-superDavky jsou-proste-super
Davky jsou-proste-super
 
Základní nástroje pro automatizaci
Základní nástroje pro automatizaciZákladní nástroje pro automatizaci
Základní nástroje pro automatizaci
 
Grunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierGrunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End Tier
 
Verdades
VerdadesVerdades
Verdades
 
第一次分享
第一次分享第一次分享
第一次分享
 
Stoke Share Mobile App
Stoke Share Mobile AppStoke Share Mobile App
Stoke Share Mobile App
 
Euthenics How to dress on a date Powerpoint
Euthenics How to dress on a date PowerpointEuthenics How to dress on a date Powerpoint
Euthenics How to dress on a date Powerpoint
 
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์
รายชื่อบริษัทจัดเก็บค่าลิขสิทธิ์
 
Canh tac tren dat doc 3
Canh tac tren dat doc 3Canh tac tren dat doc 3
Canh tac tren dat doc 3
 
ENG 105 Module 1 PPT
ENG 105 Module 1 PPTENG 105 Module 1 PPT
ENG 105 Module 1 PPT
 
Tone Excel (Malay)
Tone Excel (Malay)Tone Excel (Malay)
Tone Excel (Malay)
 
Elements of a plot diagram
Elements of a plot diagramElements of a plot diagram
Elements of a plot diagram
 
Movimentouau
MovimentouauMovimentouau
Movimentouau
 
AITN - Folder For Investors English
AITN - Folder For Investors   EnglishAITN - Folder For Investors   English
AITN - Folder For Investors English
 
Ardeninlancasterestates 101014031023-phpapp01
Ardeninlancasterestates 101014031023-phpapp01Ardeninlancasterestates 101014031023-phpapp01
Ardeninlancasterestates 101014031023-phpapp01
 
BCI Eurobib Schulz Speyer Library Tables Catalog
BCI Eurobib Schulz Speyer Library Tables CatalogBCI Eurobib Schulz Speyer Library Tables Catalog
BCI Eurobib Schulz Speyer Library Tables Catalog
 
2009 Hta Generic Presentation
2009 Hta Generic Presentation2009 Hta Generic Presentation
2009 Hta Generic Presentation
 
Pak floods
Pak floodsPak floods
Pak floods
 
PRoF @ AAL 2012 Eindhoven - living lab or not ?
PRoF @ AAL 2012 Eindhoven - living lab or not ?PRoF @ AAL 2012 Eindhoven - living lab or not ?
PRoF @ AAL 2012 Eindhoven - living lab or not ?
 

More from Dmitri Kunin

Пути достижения целей обучения. Игровое обучение
Пути достижения целей обучения. Игровое обучениеПути достижения целей обучения. Игровое обучение
Пути достижения целей обучения. Игровое обучениеDmitri Kunin
 
Elearning Северная Столица: Секреты фирмы
Elearning Северная Столица: Секреты фирмыElearning Северная Столица: Секреты фирмы
Elearning Северная Столица: Секреты фирмыDmitri Kunin
 
Интерактивные компоненты. Центр E learning 21.06.12
Интерактивные компоненты. Центр E learning 21.06.12 Интерактивные компоненты. Центр E learning 21.06.12
Интерактивные компоненты. Центр E learning 21.06.12 Dmitri Kunin
 
Подготовка курсов для mLearning
Подготовка курсов для mLearningПодготовка курсов для mLearning
Подготовка курсов для mLearningDmitri Kunin
 
Игры, как мотивация к обучению
Игры, как мотивация к обучениюИгры, как мотивация к обучению
Игры, как мотивация к обучениюDmitri Kunin
 
eLearning 2012 Новогодний Форум
eLearning 2012 Новогодний ФорумeLearning 2012 Новогодний Форум
eLearning 2012 Новогодний ФорумDmitri Kunin
 
Игры в обучении в и оценке эффективности обучения
Игры в обучении в и оценке эффективности обученияИгры в обучении в и оценке эффективности обучения
Игры в обучении в и оценке эффективности обученияDmitri Kunin
 
Как презентовать так, что бы слушатели не заснули!
Как презентовать так, что бы слушатели не заснули!Как презентовать так, что бы слушатели не заснули!
Как презентовать так, что бы слушатели не заснули!Dmitri Kunin
 
Games in e learning ver2
Games in e learning ver2Games in e learning ver2
Games in e learning ver2Dmitri Kunin
 

More from Dmitri Kunin (10)

Пути достижения целей обучения. Игровое обучение
Пути достижения целей обучения. Игровое обучениеПути достижения целей обучения. Игровое обучение
Пути достижения целей обучения. Игровое обучение
 
Elearning Северная Столица: Секреты фирмы
Elearning Северная Столица: Секреты фирмыElearning Северная Столица: Секреты фирмы
Elearning Северная Столица: Секреты фирмы
 
Интерактивные компоненты. Центр E learning 21.06.12
Интерактивные компоненты. Центр E learning 21.06.12 Интерактивные компоненты. Центр E learning 21.06.12
Интерактивные компоненты. Центр E learning 21.06.12
 
Подготовка курсов для mLearning
Подготовка курсов для mLearningПодготовка курсов для mLearning
Подготовка курсов для mLearning
 
Игры, как мотивация к обучению
Игры, как мотивация к обучениюИгры, как мотивация к обучению
Игры, как мотивация к обучению
 
кунин
кунинкунин
кунин
 
eLearning 2012 Новогодний Форум
eLearning 2012 Новогодний ФорумeLearning 2012 Новогодний Форум
eLearning 2012 Новогодний Форум
 
Игры в обучении в и оценке эффективности обучения
Игры в обучении в и оценке эффективности обученияИгры в обучении в и оценке эффективности обучения
Игры в обучении в и оценке эффективности обучения
 
Как презентовать так, что бы слушатели не заснули!
Как презентовать так, что бы слушатели не заснули!Как презентовать так, что бы слушатели не заснули!
Как презентовать так, что бы слушатели не заснули!
 
Games in e learning ver2
Games in e learning ver2Games in e learning ver2
Games in e learning ver2
 

GruntJs Installation and popular plugins. MoscowJS