var gulp = require('gulp'); var gutil = require('gulp-util'); var bower = require('bower'); var concat = require('gulp-concat'); var sass = require('gulp-sass'); var minifyCss = require('gulp-minify-css'); var rename = require('gulp-rename'); var sh = require('shelljs'); var mainBowerFiles = require('main-bower-files'); var templateCache = require('gulp-angular-templatecache'); var gulpFilter = require('gulp-filter'); var paths = { sass: [ './scss/**/*.scss' ], jsProject: [ './www/js/app.js', './www/js/**/module.js', './www/js/**/module.config.js', './www/js/**/service.js', './www/js/**/routes.js', './www/js/**/controller.js', './www/js/**/*.js', '!./www/js/**/*-test.js' ], jsProjectTarget: 'project.js', jsVendorTarget: 'vendor.js', scssProject: ['./scss/ionic.app.scss'], cssVendorTarget: 'vendor.css', htmlProject: ['./www/js/**/*.html'], cssProject: ['./www/css/**/*.css'], cssProjectTarget: 'project.css', dist: 'www/dist' }; gulp.task('default', ['sass']); gulp.task('build', function() { gulp.start('sass'); gulp.start('js-concat-project'); gulp.start('js-concat-vendor'); gulp.start('css-concat-project'); gulp.start('css-concat-vendor'); gulp.start('fonts-concat-vendor'); gulp.start('html-concat-templates'); }); gulp.task('sass', function (done) { gulp.src(paths.scssProject) .pipe(sass()) .pipe(gulp.dest('./www/css/')) .on('end', done); }); gulp.task('js-concat-project', function () { return gulp.src(paths.jsProject) .pipe(concat(paths.jsProjectTarget)) .pipe(gulp.dest(paths.dist)); }); gulp.task('js-concat-vendor', function () { return gulp.src(mainBowerFiles('**/*.js')) .pipe(concat(paths.jsVendorTarget)) .pipe(gulp.dest(paths.dist)); }); gulp.task('css-concat-project', function () { return gulp.src(paths.cssProject) .pipe(concat(paths.cssProjectTarget)) .pipe(minifyCss()) .pipe(gulp.dest(paths.dist)); }); gulp.task('css-concat-vendor', function () { return gulp.src(mainBowerFiles('**/*.css')) .pipe(concat(paths.cssVendorTarget)) .pipe(minifyCss()) .pipe(gulp.dest(paths.dist)); }); gulp.task('fonts-concat-vendor', function () { return gulp.src(mainBowerFiles()) .pipe(gulpFilter(function (file) { return /ionic\/release\/fonts/.test(file.path); })) .pipe(gulp.dest('./www/dist/fonts/')); }); gulp.task('html-concat-templates', function() { gulp.src(paths.htmlProject) .pipe(templateCache({ module:'templatescache', standalone: true, root: './js' })) .pipe(gulp.dest('www/dist/')) ; }); gulp.task('watch', function() { gulp.watch(paths.sass, ['sass']); gulp.watch(paths.jsProject, ['js-concat-project']); gulp.watch(paths.htmlProject, ['html-concat-templates']); gulp.watch(paths.cssProject, ['css-concat-project']); gulp.watch(paths.sass, ['sass']); }); gulp.task('install', ['git-check'], function() { return bower.commands.install() .on('log', function(data) { gutil.log('bower', gutil.colors.cyan(data.id), data.message); }); }); gulp.task('git-check', function(done) { if (!sh.which('git')) { console.log( ' ' + gutil.colors.red('Git is not installed.'), '\n Git, the version control system, is required to download Ionic.', '\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.', '\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.' ); process.exit(1); } done(); }); gulp.task('serve:before', ['build', 'watch']);