var gulp = require('gulp'); var addsrc = require('gulp-add-src'); var gutil = require('gulp-util'); var bower = require('bower'); var clean = require('gulp-clean'); var concat = require('gulp-concat'); var jshint = require('gulp-jshint'); var sass = require('gulp-sass'); var minifyCss = require('gulp-minify-css'); var rename = require('gulp-rename'); var templateCache = require('gulp-angular-templatecache'); var ngAnnotate = require('gulp-ng-annotate'); var uglify = require("gulp-uglify"); var sh = require('shelljs'); var paths = { sass: [ './src/scss/**/*.scss' ], scripts: [ './src/js/**/*.js' ], scripts_libs: [ // './lib/angular/angular.js', // './lib/angular-animate/angular-animate.min.js', // './lib/angular-sanitize/angular-sanitize.min.js', // './lib/angular-ui-router/release/angular-ui-router.min.js', // './lib/ionic/js/ionic.min.js', // './lib/ionic/js/ionic-angular.min.js', './lib/ionic/js/ionic.bundle.min.js', './lib/angular-local-storage/dist/angular-local-storage.min.js', './lib/angular-md5/angular-md5.min.js', './lib/ngCordova/dist/ng-cordova.min.js', './lib/ng-cordova-oauth/dist/ng-cordova-oauth.min.js', './lib/jquery/dist/jquery.min.js', './lib/barcode-jquery/jquery-barcode.min.js', './lib/jquery-qrcode/jquery.qrcode.min.js', './lib/moment/min/moment.min.js', './lib/underscore/underscore-min.js', './lib/jsSHA/src/sha1.js', './lib/ion-gallery/dist/ion-gallery.min.js', ], scripts_libs_uglify: [ './lib/json2/json2.js', './lib/humanize-duration/humanize-duration.js', './lib/imgcache.js/js/imgcache.js', './lib/angular-imgcache/angular-imgcache.js' // './lib/angular-ios9-uiwebview.patch.js' ], scripts_templates: [ './src/templates/**/*.html' ], src: './src', dist: './www', dist_css: 'app.css', dist_scripts: 'app.js', dist_scripts_bundle: 'app.bundle.js', dist_scripts_templates: 'templates.js', dist_www: '../www' }; gulp.task('default', ['dist']); gulp.task('build', ['sass', 'templates', 'scripts']); gulp.task('sass', function(done) { gulp.src(paths.src + '/scss/app.scss') .pipe(sass()) .pipe(minifyCss({ keepSpecialComments: 0 })) .pipe(gulp.dest(paths.dist + '/css')) .on('end', done); }); gulp.task('templates', function (done) { gulp.src(paths.scripts_templates) .pipe(templateCache('templates.js', {module: 'app.templates', standalone: true, root: 'templates/'})) .pipe(gulp.dest(paths.src)) .on('end', done); }); gulp.task('scripts', ['templates'], function(done) { gulp.src(paths.scripts.concat([paths.src + '/' + paths.dist_scripts_templates])) .pipe(jshint({laxcomma: true})) .pipe(jshint.reporter('default')) .pipe(ngAnnotate({ remove: true, add: true, single_quotes: true })) .pipe(uglify()) .pipe(concat(paths.dist_scripts)) .pipe(rename({ extname: '.js' })) .pipe(gulp.dest(paths.dist + '/js')) .on('end', done); }); gulp.task('scripts-bundle', [], function(done) { gulp.src(paths.scripts_libs_uglify) .pipe(uglify()) .pipe(addsrc.prepend(paths.scripts_libs)) .pipe(concat(paths.dist_scripts_bundle)) .pipe(gulp.dest(paths.dist + '/js')) .on('end', done); }); gulp.task('dist', ['build'], function() { gulp.src(paths.dist + '/css/' + paths.dist_css) .pipe(gulp.dest(paths.dist_www + '/css')); gulp.src(paths.dist + '/js/' + paths.dist_scripts) .pipe(gulp.dest(paths.dist_www + '/js')); gulp.src(paths.dist + '/js/' + paths.dist_scripts_bundle) .pipe(gulp.dest(paths.dist_www + '/js')); return true; }); gulp.task('watch', ['dist'], function() { gulp.watch(paths.sass.concat(paths.scripts_templates.concat(paths.scripts)), ['dist']); }); 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(); });