Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Automating your workflow with Grunt
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Dimitris Tsironis
December 20, 2013
Technology
200
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Automating your workflow with Grunt
Dimitris Tsironis
December 20, 2013
More Decks by Dimitris Tsironis
See All by Dimitris Tsironis
Introduction to Digigov SDK
tsironis
0
63
How to Develop Backbone Plugins (...for the greater good!)
tsironis
0
290
Modern Webapps
tsironis
1
110
Git 201
tsironis
0
200
Git 101
tsironis
0
230
Capistrano for non-Rubyists
tsironis
4
150
HTML+CSS: how to get started
tsironis
1
89
Coffeescript: unfancy javascript
tsironis
2
500
Coffescript - take a sip of code
tsironis
4
180
Other Decks in Technology
See All in Technology
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
420
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
130
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
150
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
0
330
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
280
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
180
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.6k
手塩にかけりゃいいってもんじゃない
ming_ayami
0
610
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
110
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
180
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
240
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
Unsuck your backbone
ammeep
672
58k
From π to Pie charts
rasagy
0
210
Thoughts on Productivity
jonyablonski
76
5.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Accessibility Awareness
sabderemane
1
140
The Curious Case for Waylosing
cassininazir
1
400
WENDY [Excerpt]
tessaabrams
11
38k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Transcript
Automate your front-end workflow with grunt.js
About this This talk is about workflow patterns using Grunt
reinvent your work, love JS more make your life easier
Who Dimitris Tsironis Front-end Engineer at Splunk (ex-Bugsense) ! passionate
about bringing BigData to the masses, eating bacon & geeing around
First, a story from good ol’ days
<a href="javascript:void(0)" onclick=“myJsFunc();”> Run JavaScript Code!!!!11! </a> First
<a href="javascript:void(0)" onclick=“myJsFunc();”> Run JavaScript Code!!!!11! </a> First
Now
Now
None
None
None
*cough* *cough*
Problem typical js file, named stuff.js
grunt is a task-based command line build tool for JavaScript
projects
Grunt.js is used for Concatenation Testing with headless browsers JS
linting basically, whatever
Installation $ npm install -g grunt-cli Install the grunt cli
tool
Installation Edit your package.json file { "name": "my-project-name", "version": "0.1.0",
"devDependencies": { "grunt": "~0.4.2", "grunt-contrib-jshint": "~0.6.3" } } grunt.loadNpmTasks(‘grunt-contrib-uglify'); Then in your Gruntfile.js add
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. grunt.loadNpmTasks('grunt-contrib-uglify'); ! // Default task(s). grunt.registerTask('default', ['uglify']); ! };
Concatenating module: grunt-contrib-concat concat: { ‘assets/js/main.js’: [ ‘js/libs/jquery.js’, ‘js/libs/underscore.js’ ‘js/libs/backbone.js,
‘js/src/app.js’], ‘assets/css/style.css’: [ ‘css/bootstrap.css’, ‘css/main.css’] }
Compiling LESS module: grunt-contrib-less less: { dashboard: { files: {
"css/main.css": "less/style.less", "css/landing.css": "less/landing.less", } } }
Running specs #1 module: grunt-contrib-jasmine jasmine: { src: [ 'specs/project.js'],
options: { host: 'http://localhost:7000/', vendor: [ ‘libs/jquery.js’], helpers: [ 'specs/jasmine-jquery/lib/jasmine-jquery.js', ‘specs/bower_components/sinonjs/sinon.js' ], template: 'specs/index.tmpl', specs: 'specs/build/specs.js', keepRunner: true } },
Running specs #2 module: grunt-contrib-connect connect: { server: { options:
{ port: 7000 } } } grunt.registerTask('specs', ['connect', 'jasmine']); Registering our custom “specs” tasks
Watching files module: grunt-contrib-watch watch: { gruntfile: { files: '<%=
jshint.gruntfile.src %>', tasks: ['jshint:gruntfile', 'concat', 'less'] }, less: { files: “less/**/*.less”, /* or use an array */ tasks: [‘less’, ‘concat’] }, specs: { files: “specs/**/*Specs.js” tasks: [‘specs’] } }
Live reload module: grunt-reload reload: { port: 6001, proxy: {
host: 'localhost' } }, watch: { less: { files: “less/**/*.less”, /* or use an array */ tasks: [‘less’, ‘concat’, ‘reload’] } }
bower a package manager for the web
Installation $ npm install -g bower Install the bower tool
Usage $ bower install <package> Install the bower tool $
bower install <package>#<version> or just install dependencies from bower.json $ bower install
Search $ bower search <search-term> Search the packages
/etc/ $ bower help Help is always provided
Defining a new package $ bower init { "name": "my-project",
"version": "1.0.0", "main": "path/to/main.css", "ignore": [ ".jshintrc", "**/*.txt" ], "dependencies": { "<name>": "<version>" }, "devDependencies": { "<test-framework-name>": "<version>" } }
Registering a package $ bower register <package-name> <git-endpoint> a valid
manifest JSON Git tags (using semver) be available at a Git endpoint (e.g., GitHub); remember to push your Git tags!
Bugsense.js plugin (see Gruntfile.js & bower.json) Addy Osmani presentation Grunt
plugins Bower homepage (incl. Yeomann) Grunt homepage
Thanks! twitter @tsironakos github @tsironis