Files
ionic-framework/Gruntfile.js
2014-02-20 13:15:52 -05:00

245 lines
5.8 KiB
JavaScript

var cp = require('child_process');
var buildConfig = require('./config/build');
module.exports = function(grunt) {
grunt.initConfig({
concat: {
options: {
separator: ';\n'
},
dist: {
src: buildConfig.ionicFiles,
dest: 'dist/js/ionic.js'
},
distangular: {
src: buildConfig.angularIonicFiles,
dest: 'dist/js/ionic-angular.js'
},
bundle: {
options: {
banner:
'/*!\n' +
' * ionic.bundle.js is a concatenation of:\n' +
' * ionic.js, angular.js, angular-animate.js,\n'+
' * angular-ui-router.js, and ionic-angular.js\n'+
' */\n\n'
},
src: [
'dist/js/ionic.js',
'config/lib/js/angular/angular.js',
'config/lib/js/angular/angular-animate.js',
'config/lib/js/angular/angular-sanitize.js',
'config/lib/js/angular-ui/angular-ui-router.js',
'dist/js/ionic-angular.js'
],
dest: 'dist/js/ionic.bundle.js'
},
bundlemin: {
options: {
banner: '<%= concat.bundle.options.banner %>'
},
src: [
'dist/js/ionic.min.js',
'config/lib/js/angular/angular.min.js',
'config/lib/js/angular/angular-animate.min.js',
'config/lib/js/angular/angular-sanitize.min.js',
'config/lib/js/angular-ui/angular-ui-router.min.js',
'dist/js/ionic-angular.min.js'
],
dest: 'dist/js/ionic.bundle.min.js'
}
},
version: {
dist: {
dest: 'dist/version.json'
}
},
copy: {
dist: {
files: [{
expand: true,
cwd: './config/lib/',
src: buildConfig.vendorFiles,
dest: './dist/'
}]
}
},
//Used by CI to check for temporary test code
//xit, iit, ddescribe, xdescribe
'ddescribe-iit': ['js/**/*.js'],
'merge-conflict': ['js/**/*.js'],
'removelogging': {
dist: {
files: [{
expand: true,
cwd: './dist/js',
src: ['*.js'],
dest: 'dist/js/'
}],
options: {
methods: 'log info assert count clear group groupEnd groupCollapsed trace debug dir dirxml profile profileEnd time timeEnd timeStamp table exception'.split(' ')
}
}
},
jshint: {
files: ['Gruntfile.js', 'js/**/*.js', 'test/**/*.js'],
options: {
jshintrc: '.jshintrc'
}
},
karma: {
options: {
configFile: 'config/karma.conf.js'
},
single: {
options: {
singleRun: true
}
},
sauce: {
options: {
singleRun: true,
configFile: 'config/karma-sauce.conf.js'
}
},
watch: {
}
},
uglify: {
dist: {
files: {
'dist/js/ionic.min.js': 'dist/js/ionic.js',
'dist/js/ionic-angular.min.js': 'dist/js/ionic-angular.js'
}
},
options: {
preserveComments: 'some'
}
},
sass: {
dist: {
files: {
'dist/css/ionic.css': 'scss/ionic.scss',
}
}
},
cssmin: {
dist: {
files: {
'dist/css/ionic.min.css': 'dist/css/ionic.css',
}
}
},
'string-replace': {
version: {
files: {
'dist/js/ionic.js': 'dist/js/ionic.js',
'dist/js/ionic-angular.js': 'dist/js/ionic-angular.js',
'dist/css/ionic.css': 'dist/css/ionic.css',
},
options: {
replacements: [{
pattern: /{{ VERSION }}/g,
replacement: '<%= pkg.version %>'
}]
}
}
},
bump: {
options: {
files: ['package.json'],
commit: false,
createTag: false,
push: false
}
},
watch: {
scripts: {
files: ['js/**/*.js', 'ext/**/*.js'],
tasks: ['concat:dist', 'concat:distangular', 'concat:bundle'],
options: {
spawn: false
}
},
sass: {
files: ['scss/**/*.scss'],
tasks: ['sass'],
options: {
spawn: false
}
}
},
pkg: grunt.file.readJSON('package.json')
});
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', [
'jshint',
'build'
]);
grunt.registerTask('build', [
'sass',
'cssmin',
'concat:dist',
'concat:distangular',
'copy',
'string-replace',
'version',
'concat:bundle',
'removelogging',
'uglify',
'concat:bundlemin'
]);
grunt.registerMultiTask('karma', 'Run karma', function() {
var done = this.async();
var options = this.options();
var config = options.configFile;
var browsers = grunt.option('browsers');
var singleRun = grunt.option('singleRun') || options.singleRun;
var reporters = grunt.option('reporters');
cp.spawn('node', ['node_modules/karma/bin/karma', 'start', config,
browsers ? '--browsers=' + browsers : '',
singleRun ? '--single-run=' + singleRun : '',
reporters ? '--reporters=' + reporters : ''
], { stdio: 'inherit' })
.on('exit', function(code) {
if (code) return grunt.fail.warn('Karma test(s) failed. Exit code: ' + code);
done();
});
});
grunt.registerMultiTask('version', 'Generate version JSON', function() {
var pkg = grunt.config('pkg');
this.files.forEach(function(file) {
var dest = file.dest;
var d = new Date();
var version = {
version: pkg.version,
codename: pkg.codename,
date: grunt.template.today('yyyy-mm-dd'),
time: d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds()
};
grunt.file.write(dest, JSON.stringify(version, null, 2));
});
});
};