SlideShare a Scribd company logo
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

PDF
Automated css
PPTX
GRUNT - The JavaScript Task Runner
PDF
Gulp.js - alternatywa do Grunta
PDF
Сборка JavaScript-проектов с помощью Grunt
PDF
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
PDF
詳説WebAssembly
PDF
PostCSS
PPTX
JavaScript frameworks, libraries and tools
Automated css
GRUNT - The JavaScript Task Runner
Gulp.js - alternatywa do Grunta
Сборка JavaScript-проектов с помощью Grunt
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
詳説WebAssembly
PostCSS
JavaScript frameworks, libraries and tools

What's hot (20)

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

Viewers also liked (20)

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

More from Dmitri Kunin (10)

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

GruntJs Installation and popular plugins. MoscowJS