Front End Development Automation with Grunt

36
Front-End Automation with Grunt Belén Albeza @ladybenko www.belenalbeza.com

description

Front End Development Automation with Grunt: Belen Albeza.

Transcript of Front End Development Automation with Grunt

Page 1: Front End Development Automation with Grunt

Front-End Automation with Grunt

Belén Albeza@ladybenko

www.belenalbeza.com

Page 2: Front End Development Automation with Grunt

A workflow example

Lint Test

Run server

Open browser

Compile assets

Watch assets

Recompile assets

Reload browser

Page 3: Front End Development Automation with Grunt

We do this already…

•python -m SimpleHTTPServer

• open index.html

• sass --watch sass:css

• jshint main.js

• ./conquer_the_world.sh

• Etc.

Page 4: Front End Development Automation with Grunt

What if we integrate all these tasks?

• We can setup long flows and run it with just one task

• We can stop the flow if a task fails (for instance, abort when linting spots an error)

• Everyone in the dev team can follow the same workflow

Page 5: Front End Development Automation with Grunt
Page 6: Front End Development Automation with Grunt

Grunt

Page 7: Front End Development Automation with Grunt

What is Grunt?

• A JavaScript task runnernpm install -g grunt-cli

• Lots of plugins for front-end and Node development

Page 8: Front End Development Automation with Grunt

Gruntfile.js

• A JavaScript file with our Grunt config

• Think of it as a Makefile, Rakefile, etc.

• We can use plugins that provide common tasks…

• …or we can cook our own tasks!

Page 9: Front End Development Automation with Grunt

module.exports(function (grunt) { [‘a-cool-grunt-plugin’, ‘another-plugin’ ].forEach(grunt.loadNpmTasks); grunt.initConfig({ // ... });});

Page 10: Front End Development Automation with Grunt

How to run tasks

• grunt mytask will run all the targets of mytask

• grunt mytask:target will run the specific target of mytask

grunt cleangrunt sass:dev

Page 11: Front End Development Automation with Grunt

Linter

• A Linter analyses our code

• Looks for syntax errors (awesome for script languages)

• Looks for formatting errors (ex: “don’t use more than 80 chars per line!”)

• Looks for bad practises (ex: “you can’t use this variable without declaring it first”)

Page 12: Front End Development Automation with Grunt

Install JSHint plugin

• npm install grunt-contrib-jshint

• grunt jshint

Page 13: Front End Development Automation with Grunt

grunt.initConfig({ jshint: { all: [‘Gruntfile.js’, ‘js/**/*.js’] }});

Page 14: Front End Development Automation with Grunt

Sass

• CSS, as a language, sucks

• Sass is a nice language that compiles to CSS

• We have variables, inheritance/mixins, a clean syntax, partials...

Page 15: Front End Development Automation with Grunt

@import _reset

$main-color: #cff$fg-color: #000

@mixin std-button background: $main-color color: $fg-color a.button, button +std-button

Page 16: Front End Development Automation with Grunt

Install Sass plugin

• npm install grunt-contrib-sass

• grunt sass

Page 17: Front End Development Automation with Grunt

grunt.initConfig({ sass: { dev: { options: { style: ‘expanded’, lineComments: true }, files: { ‘css/main.css’: ‘sass/main.sass’ } } }});

Page 18: Front End Development Automation with Grunt

// 1-to-1 file mapping. Ex:// sass/unicorn.sass -> css/unicorn.cssfiles: { expand: true, cwd: ‘sass’, src: [‘**/*.sass’], dest: ‘css’, ext: ‘.css’});

Page 19: Front End Development Automation with Grunt

Watch

• You may have several daemons listening for changes to files to do something

• Examples: Sass/LESS stylesheets, CoffeeScript files, Handlebars templates, etc.

• With Grunt you can group all of them in a single place

Page 20: Front End Development Automation with Grunt

Install Watch plugin

• npm install grunt-contrib-watch

• grunt watch

Page 21: Front End Development Automation with Grunt

grunt.initConfig({ watch: { sass: { files: [‘sass/**/*.sass’], tasks: [‘sass:dev’] } }});

Page 22: Front End Development Automation with Grunt

• You can create tasks than run other tasks

• Use them to set-up workflows, like “regular development” or “build a release”.

Build your own flows

Page 23: Front End Development Automation with Grunt

grunt.registerTask(‘server’, [‘clean’, ‘jshint’, ‘sass:dev’, ‘jasmine’, ‘connect:server’, ‘open’, ‘watch’]);

grunt.registerTask(‘release’, [‘clean’, ‘jshint’, ‘sass:prod’, ‘jasmine’, ‘copy:release’]);

Page 24: Front End Development Automation with Grunt

• If you don’t find the right plugin, you can create your very own task…

• …and wrap it in a plugin so others can use it as well ;)

Create your own tasks

Page 25: Front End Development Automation with Grunt

grunt.registerTask(‘version’,‘shows version number’, function () {

// implement our own task var pkg = grunt.file.readJSON( ‘package.json’); grunt.log.writeln(pkg.version);

});

Page 26: Front End Development Automation with Grunt

• grunt-contrib-clean: deletes files and directories (usefull for temporary files)

• grunt-contrib-jasmine: run Jasmine tests from the console and in the browser

• grunt-contrib-copy: copy files (useful to make builds)

• grunt-contrib-connect: run a local server

Other useful plugins

Page 27: Front End Development Automation with Grunt

Browse more plugins

• http://gruntjs.com/plugins

• There are plugins to minify CSS, reload a browser tab, create zips, erase files, build assets (Handlebars, Coffee, LESS, etc.)…

• And our Firefox OS grunt plugin! :)npm install grunt-firefoxos

Page 29: Front End Development Automation with Grunt

Demo

Page 30: Front End Development Automation with Grunt

A different use case

• This is just not only for front-end or Node development...

• Think of other projects you can automate!

Page 31: Front End Development Automation with Grunt

A book!

Page 32: Front End Development Automation with Grunt

A book in Leanpub

• Leanpub is a publishing platform

• You write your manuscripts in Markdown (plain text) and put them into a shared folder in Dropbox

• Then, they build a pretty eBook from your plain text files

Page 33: Front End Development Automation with Grunt

Problem

• You need to put your manuscript files in Dropbox…

• …but I want my own version control in Github…

• …and I have other files (PSD’s, sample code, etc.) that I don’t want to put into that folder

Page 34: Front End Development Automation with Grunt

Grunt to the rescue

Lint sample code

Zip sample code

Copy MD files to

Dropbox

Convert from Github

MD to Leanpub MD

Page 35: Front End Development Automation with Grunt

More about Grunt

• Grunt’s official “Getting Started Guide” www.gruntjs.com/getting-started

• How to create your own tasks http://gruntjs.com/creating-tasks

• “Power-Up Your Front-End Development with Grunt” www.leanpub.com/grunt

Page 36: Front End Development Automation with Grunt

Thanks!Questions?

@ladybenko