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
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
67
How to Develop Backbone Plugins (...for the greater good!)
tsironis
0
300
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
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
780
システム思考で問題に対処する
yussak
0
220
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
240
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
640
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
120
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
230
LanceDB入門
mocobeta
5
180
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
サイバー捜査員研修(前半)
nomizone
1
1.9k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
680
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
280
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
550
Everyday Curiosity
cassininazir
0
270
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
930
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
450
Side Projects
sachag
455
43k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
680
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Ethics towards AI in product and experience design
skipperchong
2
340
Un-Boring Meetings
codingconduct
0
380
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
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