Skip to content
Browse files

chore(Grunt): switch from Rake to Grunt

Migrates the Angular project from Rake to Grunt.

- Drops Ruby dependency
- Lowers barrier to entry for contributions from JavaScript ninjas
- Simplifies the Angular project setup and build process
- Adopts industry-standard tools specific to JavaScript projects
- Support building angular.js on Windows platform (really?!? why?!?)

BREAKING CHANGE: Rake is completely replaced by Grunt. Below are the deprecated Rake tasks and their Grunt equivalents:

rake --> grunt
rake package --> grunt package
rake init --> N/A
rake clean --> grunt clean
rake concat_scenario --> grunt build:scenario
rake concat --> grunt build
rake concat_scenario --> grunt build:scenario
rake minify --> grunt minify
rake version --> grunt write:version
rake docs --> grunt docs
rake webserver --> grunt webserver
rake test --> grunt test
rake test:unit --> grunt test:unit
rake test:<jqlite|jquery|modules|e2e> --> grunt test:<jqlite|jquery|modules|end2end|e2e>
rake test[Firefox+Safari] --> grunt test --browsers Firefox,Safari
rake test[Safari] --> grunt test --browsers Safari
rake autotest --> grunt autotest

* For convenience grunt test:e2e starts a webserver for you, while grunt test:end2end doesn't.
  Use grunt test:end2end if you already have the webserver running.
* Removes duplicate entry for Describe.js in the angularScenario section of angularFiles.js
* Updates docs/src/gen-docs.js to use #done intead of the deprecated #end
* Uses grunt-contrib-connect instead of lib/nodeserver (removed)
* Removes, travis now uses grunt webserver
* Built and minified files are identical to Rake's output, with the exception of one less
  character for git revisions (using --short) and a couple minor whitespace differences

Closes #199


  • Loading branch information
geddski authored and IgorMinar committed Mar 6, 2013
1 parent b13da18 commit 7a77fdae4f6a1a03734374aacc7264ebd6dbe94d
@@ -5,9 +5,9 @@ node_js:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- npm install -g testacular@canary
- rake package
- ./ > /dev/null &
- npm install -g grunt-cli
- grunt package
- grunt webserver > /dev/null &

- rake test[Firefox,"--reporters=dots"]
- grunt test --browsers Firefox --reporters=dots
@@ -0,0 +1,170 @@
var files = require('./angularFiles').files;
var util = require('./lib/grunt/utils.js');

module.exports = function(grunt) {
//grunt plugins

var NG_VERSION = util.getVersion();

//global beforeEach


connect: {
devserver: {
options: {
port: 8000,
hostname: 'localhost',
base: '.',
keepalive: true,
middleware: function(connect, options){
return [
//uncomment to enable CSP
// util.csp(),
testserver: {}

test: {
jqlite: 'testacular-jqlite.conf.js',
jquery: 'testacular-jquery.conf.js',
modules: 'testacular-modules.conf.js',
//NOTE run grunt test:e2e instead and it will start a webserver for you
end2end: 'testacular-e2e.conf.js'

autotest: {
jqlite: 'testacular-jqlite.conf.js',
jquery: 'testacular-jquery.conf.js'

clean: {build: ['build']},

build: {
scenario: {
dest: 'build/angular-scenario.js',
src: [
util.wrap([files['angularSrc'], files['angularScenario']], 'ngScenario/angular')
styles: {
css: ['css/angular.css', 'css/angular-scenario.css']
angular: {
dest: 'build/angular.js',
src: util.wrap([files['angularSrc']], 'angular'),
styles: {
css: ['css/angular.css'],
minify: true
loader: {
dest: 'build/angular-loader.js',
src: util.wrap(['src/loader.js'], 'loader')
mocks: {
dest: 'build/angular-mocks.js',
src: ['src/ngMock/angular-mocks.js'],
strict: false
sanitize: {
dest: 'build/angular-sanitize.js',
src: util.wrap([
], 'module')
resource: {
dest: 'build/angular-resource.js',
src: util.wrap(['src/ngResource/resource.js'], 'module')
cookies: {
dest: 'build/angular-cookies.js',
src: util.wrap(['src/ngCookies/cookies.js'], 'module')
bootstrap: {
dest: 'build/angular-bootstrap.js',
src: util.wrap(['src/bootstrap/bootstrap.js'], 'module')
bootstrapPrettify: {
dest: 'build/angular-bootstrap-prettify.js',
src: util.wrap(['src/bootstrap/bootstrap-prettify.js', 'src/bootstrap/google-prettify/prettify.js'], 'module'),
styles: {
css: ['src/bootstrap/google-prettify/prettify.css'],
minify: true

min: {
angular: 'build/angular.js',
cookies: 'build/angular-cookies.js',
loader: 'build/angular-loader.js',
resource: 'build/angular-resource.js',
sanitize: 'build/angular-sanitize.js',
bootstrap: 'build/angular-bootstrap.js',
bootstrapPrettify: 'build/angular-bootstrap-prettify.js',

docs: {
process: ['build/docs/*.html', 'build/docs/.htaccess']

copy: {
i18n: {
files: [
{ src: 'src/ngLocale/**', dest: 'build/i18n/', expand: true, flatten: true }

compress: {
build: {
options: {archive: 'build/angular-'+ NG_VERSION.full +'.zip'},
src: ['**'], cwd: 'build', expand: true

write: {
versionTXT: {file: 'build/version.txt', val: NG_VERSION.full},
versionJSON: {file: 'build/version.json', val: JSON.stringify(NG_VERSION)}

//alias tasks
grunt.registerTask('test:unit', ['test:jqlite', 'test:jquery', 'test:modules']);
grunt.registerTask('minify', ['clean', 'build', 'minall']);
grunt.registerTask('test:e2e', ['connect:testserver', 'test:end2end']);
grunt.registerTask('webserver', ['connect:devserver']);
grunt.registerTask('package', ['clean', 'buildall', 'minall', 'docs', 'copy', 'write', 'compress']);
grunt.registerTask('default', ['package']);
@@ -21,21 +21,19 @@ Building AngularJS
[Once you have your environment setup]( just run:

rake package
grunt package

Running Tests
To execute all unit tests, use:

rake test:unit
grunt test:unit

To execute end-to-end (e2e) tests, use:

rake package
rake webserver &
rake test:e2e
grunt package
grunt test:e2e

To learn more about the rake tasks, run `rake -T` and also read our
[contribution guidelines]( and instructions in this
[commit message](
To learn more about the grunt tasks, run `grunt --help` and also read our
[contribution guidelines](

0 comments on commit 7a77fda

Please sign in to comment.
You can’t perform that action at this time.