SlideShare a Scribd company logo
Grunt.js
The build tool for the web
for the web-experience



                             david.amend@it-amend.de
https://github.com/raDiesle/backbone.js-jquerymobile-boilerplate-template
Technical Background
Content

●   Why a build tool is needed for CI ?
●   Why Grunt.js ?
●   Demo
●   Why Yeoman perfects Grunt.js
Supports Development
Continuous integration
aims to improve the quality of software,
and to reduce the time taken to deliver it,
by replacing the traditional practice of
applying quality control   after completing all
development.
The process of
Continous Integration


Developer


            Code


                   CI-Server
The process of
 Continous Integration
                                                Cloud

                   Webserver
                                Developer


Developer
                                            Business/
                                            -Customer
            Code


                    CI-Server

                                      QA-Employee
The process of
 Continous Integration
                                                Cloud

                   Webserver
                                Developer


Developer
                                            Business/
                                            -Customer
            Code


                    CI-Server

                                      QA-Employee
Grunt.js


● node npm package




                     https://npmjs.org/browse/depended/grunt
                     http://benalman.com/news/2012/08/why-grunt/
Grunt.js


● node npm package
● 3700++ Watches on Github




                             https://npmjs.org/browse/depended/grunt
                             http://benalman.com/news/2012/08/why-grunt/
Grunt.js


● node npm package
● 3700++ Watches on Github
● TestSwarm, modernizr, jQuery,
  jQueryMobile



                             https://npmjs.org/browse/depended/grunt
                             http://benalman.com/news/2012/08/why-grunt/
Grunt.js


● node npm package
● 3700++ Watches on Github
● TestSwarm, modernizr, jQuery,
  jQueryMobile



                             https://npmjs.org/browse/depended/grunt
                             http://benalman.com/news/2012/08/why-grunt/
Basic Grunt.js tasks
● init
  Generate project scaffolding from a predefined template
Create Standards with
Bootstrapping/ Templates
Basic Grunt.js tasks
● concat
  Concatenate files
● init
  Generate project scaffolding from a predefined template
● lint
  Validate files with JSHint
● min
  Minify files with UglifyJS.
Basic Grunt.js tasks
● init
  Generate project scaffolding from a predefined template
● lint
  Validate files with JSHint
● min
  Minify files with UglifyJS.
● server
  Start a static node web server
● test
  Run unit tests with nodeunit. (Jasmine support)
● qunit
  Run QUnit unit tests in a headless PhantomJS instance.
● watch
  Run predefined tasks whenever watched files change.
● concat
  Concatenate files
Ant
<target name="js-compile-all" description="What does it do?" unless="skip-js-compile">
   <echo>Executing my JS files in ${input.scripts.dir} ...</echo>
   <apply executable="java" dest="${output.scripts.dir}">
     <arg value="-jar"/>
     <arg path="${jar.lib.dir}/closure-compiler.jar"/>
     <arg lmaxine="--js"/>
     <srcfile/>
     <arg line="--js_output_file"/>
     <targetfile/>
     <fileset dir="${output.scripts.dir}" includes="**/*-main.debug.js"/>
     <mapper type="glob" from="*-main.debug.js" to="*-main.min.js"/>
   </apply>
   <echo>Finished manipulating mx JS files</echo>
</target>
Rake - Ruby
def uglify(script_file)
 output = `uglifyjs #{script_file}`

 #Did it work?
 if !$?.success?
   puts "Uglify Failed"
   Process.abort
 end

 output
end
Grunt.js
grunt.initConfig({
  min: {
    dist: {
      src: ['dist/built.js'],
      dest: 'dist/built.min.js'
    }
  }
});

                http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
Easiest Syntax: JavaScript
grunt.initConfig({
  min: {
    dist: {
      src: ['dist/built.js'],
      dest: 'dist/built.min.js'
    }
  }
});

                http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
JavaScript for everyone
"...even our I’d-rather-not-
touch-JavaScript-even-with-a-
very-long-stick
backend developers,
speak some JavaScript."

        http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
Balance of extendability


     Declarative    Scripting
    Configuration   Approach
Build tool for the Web
Concepts of
 managing tasks
Grunt.js file:

●   grunt.loadNpmTasks('grunt-sample');
●   grunt.loadTasks(tasksPath)
●   grunt.loadTasks('tasks');
●   grunt.registerTask('default', 'lint qunit concat
    min');
Enriching Tasks
grunt.registerMultiTask(
   taskName, description, taskFunction
);
Enriching Tasks
grunt.registerHelper("helloWorld", function(){
   return "Hi you!!!";
})

grunt.helper('helloWorld');
Async-Support

var done = this.async; // tell grunt to do task async
setTimeout(function(){
  var isSuccessful = Math.random() > 0.5;
  done(isSuccessful);
}
Async-Support

var done = this.async; // tell grunt to do task async
setTimeout(function(){
  var isSuccessful = Math.random() > 0.5;
  done(isSuccessful);
}

this.requires('random');
Utils & Variables & more

●   Warn, Error, Fatal
●   grunt.utils._, grunt.utils.hooker
●   grunt.task.current.file
●   ...
Demo #1
Grunt.js and Yeoman, Continous Integration
Yeoman
Yeoman is a robust and opinionated
set of tools, libraries
and a workflow
that can help developers to build
beautiful, compelling web apps.

@By Paul Irish, Addy Osmani,
Sindre Sorhus, Mickael Daniel,
Eric Bidelman ...
Yeoman builds on top
of Grunt.js




●   package management like apt-get
DRY (Don't repeat yourself)
● Scaffolding & Prototyping
  Coding by convention
  Forcing
  to best practices
  CommonJS Module




                          http://dl.dropbox.com/u/39519/talks/io-tooling/index.html#21
Sharing best practices



"I love the backbone
boilerplate!"

Tony Juli 1, 2012 at 1:25 am
Demo #2
My seamless workflow
Any Questions ?
● Against Grunt.js as a build system
   http://blog.millermedeiros.com/node-js-ant-grunt-and-other-build-tools/

● Reply : Why Grunt.js
   http://benalman.com/news/2012/08/why-grunt/




david.amend@it-amend.de
Articles
Google IO, Better web app development
through tooling
http://dl.dropbox.com/u/39519/talks/io-tooling/index.html#21


Blog about last commit comments
http://www.commitlogsfromlastnight.com/


Grunt-modernizr, builder which runs in TravisCI
https://github.com/doctyper/grunt-modernizr


Continous Integration in general
http://www.slideshare.net/bhavinjavia/continuous-integration-and-builds


Example of grunt usage
http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
Additional Slides
Grunt.js and Yeoman, Continous Integration
Goals
● Create a baseline for developers
● Improve existing solutions
● Share knownledge



       Email me: David.Amend@it-amend.de
You are different !
You are different !
http://incident57.com/codekit/
Tools to unify development
"I wrote a README the other day for a project ... and as I was writing it,
I realized that it was the sort of thing that might have intimidated the
hell out of me a couple of years ago, what with its casual mentions of
Node, npm, Homebrew, git, tests, and development and
production builds."...
Many members of the community – myself included – lacked
traditional programming experience. HTML, CSS, and JavaScript –
usually in the form of jQuery – were self-taught skills.
...here’s a new set of baseline skills required in order to be
successful as a front-end developer, and developers who don’t meet
this baseline are going to start feeling more and more left behind as
those who are sharing their knowledge start to assume that certain
things go without saying.
by Rebecca Murphy (+Paul Irish, Mike Taylor, Angus Croll, and Vlad Filippov)


                                                 http://rmurphey.com/blog/2012/04/12/a-baseline-for-front-end-developers/
http://jamesonjavascript.wordpress.com/2012/04/10/state-of-the-art/
Community rules
Grunt uses async for asynchronous function queue processing, dateformat for formatting dates and temporary for creating temporary files.
But on the other hand, I wanted synchronous globbing, and the excellent glob was async-only at the time… so I wrote my own. I even called it
glob-whatev so that people wouldn’t take it too seriously. Of course, I’d love to switch to glob now that it supports synchronous globbing, but
there’s at least one issue that’s blocking me from using it.
Build tools
ant, maven (Java)
nant (.NET)
make ( C++)
rake / Caphistrano
http://www.commitlogsfromlastnight.com
More responsibility
Grunt.js and Yeoman, Continous Integration
Fun @ work
Grunt.js and Yeoman, Continous Integration
ant, maven (Java); nant (.NET) make ( C++) rake / Caphistrano node: buildr.npm Smoosh Gear.js Rivet
Roto
ant, maven (Java); nant (.NET) make ( C++) rake / Caphistrano node: buildr.npm Smoosh Gear.js Rivet
Roto
Seamless Integration




 ●   Anonymous metrics report to
     Google Analytics
XXX aims to improve the
quality of software, and to
reduce the time taken to deliver it, by
replacing the traditional practice
of applying quality control after completing all
development.

                                            http://en.wikipedia.org/
XXX aims to improve the
quality of software, and to
reduce the time taken to deliver it, by replacing
               applying
the traditional practice of
quality control after
completing all development.
The process of
 Continous Integration

                             Developer


Developer
                                         Business/
                                         -Customer
            Code


                   CI-Webserver

                                   QA-Employee
Continous Integration




●   clean - compile - test - package
●   Continous Delivery
●   Metrics
●   Saving time
                            http://www.slideshare.net/bhavinjavia/continuous-integration-and-builds
                            https://github.com/codedance/Retaliation
                                                    http://www.cuberick.com/2008/10/continuous-int
Grunt-Contrib tasks
●   bump
●   clean
●   coffee
●   compress
●   copy
●   JST + Jade + Handlebars
●   Mincss, Less, Stylus
●   Require.js
●   Yuidoc
... as well as:
● Confess
    Generate Cache Manifest

●   GrundIcon, OptiPNG & jpegtran
●   Sass & Compass
●   JsTestDriver
●   Ant-Adapter               https://github.com/millermedeiros/node-ant




                                                                     https://npmjs.org/browse/depended/grunt

More Related Content

PDF
Bower & Grunt - A practical workflow
PPTX
Packing for the Web with Webpack
PDF
Bundle your modules with Webpack
PDF
Angular 2 vs React
PPTX
Grunt and Bower
PPTX
Webpack
PDF
Hitchhiker's guide to the front end development
PPTX
Improving build solutions dependency management with webpack
Bower & Grunt - A practical workflow
Packing for the Web with Webpack
Bundle your modules with Webpack
Angular 2 vs React
Grunt and Bower
Webpack
Hitchhiker's guide to the front end development
Improving build solutions dependency management with webpack

What's hot (20)

PDF
Building a Single-Page App: Backbone, Node.js, and Beyond
PDF
Production Ready Javascript With Grunt
PDF
Vue 淺談前端建置工具
PPTX
An Intro into webpack
PDF
Webpack DevTalk
PDF
Packing it all: JavaScript module bundling from 2000 to now
PDF
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
PDF
Introduction to Express and Grunt
PPTX
Webpack Introduction
PDF
Webpack: from 0 to 2
PPTX
005. a React project structure
PDF
Webpack
PDF
Node, express & sails
PPTX
007. Redux middlewares
PPTX
Bundling your front-end with Webpack
ODP
An Introduction to Vuejs
PDF
Vue.js
PDF
Javascript ui for rest services
PDF
WordPress 2017 with VueJS and GraphQL
Building a Single-Page App: Backbone, Node.js, and Beyond
Production Ready Javascript With Grunt
Vue 淺談前端建置工具
An Intro into webpack
Webpack DevTalk
Packing it all: JavaScript module bundling from 2000 to now
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Introduction to Express and Grunt
Webpack Introduction
Webpack: from 0 to 2
005. a React project structure
Webpack
Node, express & sails
007. Redux middlewares
Bundling your front-end with Webpack
An Introduction to Vuejs
Vue.js
Javascript ui for rest services
WordPress 2017 with VueJS and GraphQL
Ad

Similar to Grunt.js and Yeoman, Continous Integration (20)

PPTX
Grunt Continuous Development of the Front End Tier
PDF
Grunt & Front-end Workflow
PDF
GruntJS
PDF
Grunt training deck
PPTX
Grunt understanding
PDF
Getting Started With Grunt for WordPress Development
PPTX
Modern Development Tools
PDF
High productivity web development workflow - JavaScript Meetup Saigon 2014
PDF
High Productivity Web Development Workflow
PDF
Grunt: the wild boar dev's best friend - WordCamp London 2018
PDF
Quest for the Perfect Workflow for McrFRED
PDF
Let Grunt do the work, focus on the fun!
PPTX
Improving Workflows With Grunt.js - Big D Design 2014 - Dallas Texas
PDF
Javascript is your (Auto)mate
PDF
Front End Development Automation with Grunt
PDF
Grunt All Day
PDF
Continuous Integration for front-end JavaScript
PDF
Extending Build to the Client: A Maven User's Guide to Grunt.js
PPTX
Front end task automation using grunt, yeoman and npm(1)
Grunt Continuous Development of the Front End Tier
Grunt & Front-end Workflow
GruntJS
Grunt training deck
Grunt understanding
Getting Started With Grunt for WordPress Development
Modern Development Tools
High productivity web development workflow - JavaScript Meetup Saigon 2014
High Productivity Web Development Workflow
Grunt: the wild boar dev's best friend - WordCamp London 2018
Quest for the Perfect Workflow for McrFRED
Let Grunt do the work, focus on the fun!
Improving Workflows With Grunt.js - Big D Design 2014 - Dallas Texas
Javascript is your (Auto)mate
Front End Development Automation with Grunt
Grunt All Day
Continuous Integration for front-end JavaScript
Extending Build to the Client: A Maven User's Guide to Grunt.js
Front end task automation using grunt, yeoman and npm(1)
Ad

More from David Amend (14)

PDF
Componentization css angular
PDF
Angular 2 : learn TypeScript already with Angular 1
PDF
Performance monitoring measurement angualrjs single page apps with phantomas
PDF
Angularjs practical project experiences with javascript development in a bank
PDF
Story about module management with angular.js
PDF
Multi modularized project setup with gulp, typescript and angular.js
PDF
Reasons to migrate to modern web development with JavaScript
PDF
Thin Server Architecture SPA, 5 years old presentation
PDF
Javascript & Angular .js for the enterprise, lessons learned, typescript scal...
PDF
Grunt Advanced Vol 2, Plugins Text I/O with fun
PDF
Client Vs. Server Rendering
PDF
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
PDF
Grunt js for the Enterprise Vol.1: Frontend Performance with Phantomas
PDF
Gwt widget frameworks_presentation
Componentization css angular
Angular 2 : learn TypeScript already with Angular 1
Performance monitoring measurement angualrjs single page apps with phantomas
Angularjs practical project experiences with javascript development in a bank
Story about module management with angular.js
Multi modularized project setup with gulp, typescript and angular.js
Reasons to migrate to modern web development with JavaScript
Thin Server Architecture SPA, 5 years old presentation
Javascript & Angular .js for the enterprise, lessons learned, typescript scal...
Grunt Advanced Vol 2, Plugins Text I/O with fun
Client Vs. Server Rendering
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Grunt js for the Enterprise Vol.1: Frontend Performance with Phantomas
Gwt widget frameworks_presentation

Grunt.js and Yeoman, Continous Integration

  • 1. Grunt.js The build tool for the web for the web-experience [email protected]
  • 4. Content ● Why a build tool is needed for CI ? ● Why Grunt.js ? ● Demo ● Why Yeoman perfects Grunt.js
  • 5. Supports Development Continuous integration aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the traditional practice of applying quality control after completing all development.
  • 6. The process of Continous Integration Developer Code CI-Server
  • 7. The process of Continous Integration Cloud Webserver Developer Developer Business/ -Customer Code CI-Server QA-Employee
  • 8. The process of Continous Integration Cloud Webserver Developer Developer Business/ -Customer Code CI-Server QA-Employee
  • 9. Grunt.js ● node npm package https://npmjs.org/browse/depended/grunt http://benalman.com/news/2012/08/why-grunt/
  • 10. Grunt.js ● node npm package ● 3700++ Watches on Github https://npmjs.org/browse/depended/grunt http://benalman.com/news/2012/08/why-grunt/
  • 11. Grunt.js ● node npm package ● 3700++ Watches on Github ● TestSwarm, modernizr, jQuery, jQueryMobile https://npmjs.org/browse/depended/grunt http://benalman.com/news/2012/08/why-grunt/
  • 12. Grunt.js ● node npm package ● 3700++ Watches on Github ● TestSwarm, modernizr, jQuery, jQueryMobile https://npmjs.org/browse/depended/grunt http://benalman.com/news/2012/08/why-grunt/
  • 13. Basic Grunt.js tasks ● init Generate project scaffolding from a predefined template
  • 15. Basic Grunt.js tasks ● concat Concatenate files ● init Generate project scaffolding from a predefined template ● lint Validate files with JSHint ● min Minify files with UglifyJS.
  • 16. Basic Grunt.js tasks ● init Generate project scaffolding from a predefined template ● lint Validate files with JSHint ● min Minify files with UglifyJS. ● server Start a static node web server ● test Run unit tests with nodeunit. (Jasmine support) ● qunit Run QUnit unit tests in a headless PhantomJS instance. ● watch Run predefined tasks whenever watched files change. ● concat Concatenate files
  • 17. Ant <target name="js-compile-all" description="What does it do?" unless="skip-js-compile"> <echo>Executing my JS files in ${input.scripts.dir} ...</echo> <apply executable="java" dest="${output.scripts.dir}"> <arg value="-jar"/> <arg path="${jar.lib.dir}/closure-compiler.jar"/> <arg lmaxine="--js"/> <srcfile/> <arg line="--js_output_file"/> <targetfile/> <fileset dir="${output.scripts.dir}" includes="**/*-main.debug.js"/> <mapper type="glob" from="*-main.debug.js" to="*-main.min.js"/> </apply> <echo>Finished manipulating mx JS files</echo> </target>
  • 18. Rake - Ruby def uglify(script_file) output = `uglifyjs #{script_file}` #Did it work? if !$?.success? puts "Uglify Failed" Process.abort end output end
  • 19. Grunt.js grunt.initConfig({ min: { dist: { src: ['dist/built.js'], dest: 'dist/built.min.js' } } }); http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
  • 20. Easiest Syntax: JavaScript grunt.initConfig({ min: { dist: { src: ['dist/built.js'], dest: 'dist/built.min.js' } } }); http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
  • 21. JavaScript for everyone "...even our I’d-rather-not- touch-JavaScript-even-with-a- very-long-stick backend developers, speak some JavaScript." http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
  • 22. Balance of extendability Declarative Scripting Configuration Approach
  • 23. Build tool for the Web
  • 24. Concepts of managing tasks Grunt.js file: ● grunt.loadNpmTasks('grunt-sample'); ● grunt.loadTasks(tasksPath) ● grunt.loadTasks('tasks'); ● grunt.registerTask('default', 'lint qunit concat min');
  • 25. Enriching Tasks grunt.registerMultiTask( taskName, description, taskFunction );
  • 26. Enriching Tasks grunt.registerHelper("helloWorld", function(){ return "Hi you!!!"; }) grunt.helper('helloWorld');
  • 27. Async-Support var done = this.async; // tell grunt to do task async setTimeout(function(){ var isSuccessful = Math.random() > 0.5; done(isSuccessful); }
  • 28. Async-Support var done = this.async; // tell grunt to do task async setTimeout(function(){ var isSuccessful = Math.random() > 0.5; done(isSuccessful); } this.requires('random');
  • 29. Utils & Variables & more ● Warn, Error, Fatal ● grunt.utils._, grunt.utils.hooker ● grunt.task.current.file ● ...
  • 32. Yeoman Yeoman is a robust and opinionated set of tools, libraries and a workflow that can help developers to build beautiful, compelling web apps. @By Paul Irish, Addy Osmani, Sindre Sorhus, Mickael Daniel, Eric Bidelman ...
  • 33. Yeoman builds on top of Grunt.js ● package management like apt-get
  • 34. DRY (Don't repeat yourself) ● Scaffolding & Prototyping Coding by convention Forcing to best practices CommonJS Module http://dl.dropbox.com/u/39519/talks/io-tooling/index.html#21
  • 35. Sharing best practices "I love the backbone boilerplate!" Tony Juli 1, 2012 at 1:25 am
  • 38. Any Questions ? ● Against Grunt.js as a build system http://blog.millermedeiros.com/node-js-ant-grunt-and-other-build-tools/ ● Reply : Why Grunt.js http://benalman.com/news/2012/08/why-grunt/ [email protected]
  • 39. Articles Google IO, Better web app development through tooling http://dl.dropbox.com/u/39519/talks/io-tooling/index.html#21 Blog about last commit comments http://www.commitlogsfromlastnight.com/ Grunt-modernizr, builder which runs in TravisCI https://github.com/doctyper/grunt-modernizr Continous Integration in general http://www.slideshare.net/bhavinjavia/continuous-integration-and-builds Example of grunt usage http://mechanics.flite.com/blog/2012/06/19/why-we-use-node-dot-js-and-grunt-to-build-javascript/
  • 42. Goals ● Create a baseline for developers ● Improve existing solutions ● Share knownledge Email me: [email protected]
  • 46. Tools to unify development "I wrote a README the other day for a project ... and as I was writing it, I realized that it was the sort of thing that might have intimidated the hell out of me a couple of years ago, what with its casual mentions of Node, npm, Homebrew, git, tests, and development and production builds."... Many members of the community – myself included – lacked traditional programming experience. HTML, CSS, and JavaScript – usually in the form of jQuery – were self-taught skills. ...here’s a new set of baseline skills required in order to be successful as a front-end developer, and developers who don’t meet this baseline are going to start feeling more and more left behind as those who are sharing their knowledge start to assume that certain things go without saying. by Rebecca Murphy (+Paul Irish, Mike Taylor, Angus Croll, and Vlad Filippov) http://rmurphey.com/blog/2012/04/12/a-baseline-for-front-end-developers/
  • 48. Community rules Grunt uses async for asynchronous function queue processing, dateformat for formatting dates and temporary for creating temporary files. But on the other hand, I wanted synchronous globbing, and the excellent glob was async-only at the time… so I wrote my own. I even called it glob-whatev so that people wouldn’t take it too seriously. Of course, I’d love to switch to glob now that it supports synchronous globbing, but there’s at least one issue that’s blocking me from using it.
  • 49. Build tools ant, maven (Java) nant (.NET) make ( C++) rake / Caphistrano
  • 55. ant, maven (Java); nant (.NET) make ( C++) rake / Caphistrano node: buildr.npm Smoosh Gear.js Rivet Roto
  • 56. ant, maven (Java); nant (.NET) make ( C++) rake / Caphistrano node: buildr.npm Smoosh Gear.js Rivet Roto
  • 57. Seamless Integration ● Anonymous metrics report to Google Analytics
  • 58. XXX aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the traditional practice of applying quality control after completing all development. http://en.wikipedia.org/
  • 59. XXX aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing applying the traditional practice of quality control after completing all development.
  • 60. The process of Continous Integration Developer Developer Business/ -Customer Code CI-Webserver QA-Employee
  • 61. Continous Integration ● clean - compile - test - package ● Continous Delivery ● Metrics ● Saving time http://www.slideshare.net/bhavinjavia/continuous-integration-and-builds https://github.com/codedance/Retaliation http://www.cuberick.com/2008/10/continuous-int
  • 62. Grunt-Contrib tasks ● bump ● clean ● coffee ● compress ● copy ● JST + Jade + Handlebars ● Mincss, Less, Stylus ● Require.js ● Yuidoc
  • 63. ... as well as: ● Confess Generate Cache Manifest ● GrundIcon, OptiPNG & jpegtran ● Sass & Compass ● JsTestDriver ● Ant-Adapter https://github.com/millermedeiros/node-ant https://npmjs.org/browse/depended/grunt