mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
245 lines
5.8 KiB
JavaScript
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));
|
|
});
|
|
});
|
|
};
|