123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- 'use strict';
- var argv = require('minimist')(process.argv.slice(2)),
- gulp = require('gulp'),
- header = require('gulp-header'),
- gutil = require('gulp-util'),
- ngAnnotate = require('gulp-ng-annotate'),
- compass = require('gulp-compass'),
- refresh = require('gulp-livereload'),
- prefix = require('gulp-autoprefixer'),
- minifyCss = require('gulp-minify-css'),
- uglify = require('gulp-uglify'),
- clean = require('gulp-rimraf'),
- concat = require('gulp-concat-util'),
- express = require('express'),
- express_lr = require('connect-livereload'),
- tinylr = require('tiny-lr'),
- opn = require('opn'),
- jshint = require('gulp-jshint'),
- jshintStylish= require('jshint-stylish'),
- pkg = require('./package.json'),
- lr,
- refresh_lr;
- var today = new Date();
- // Configuration
- var Config = {
- port: 9000,
- livereloadPort: 35728,
- testPage: 'test/ng-img-crop.html',
- cache: (typeof argv.cache !== 'undefined' ? !!argv.cache : true),
- paths: {
- source: {
- root: 'source',
- js: 'source/js',
- scss: 'source/scss'
- },
- compileUnminified: {
- root: 'compile/unminified',
- js: 'compile/unminified',
- css: 'compile/unminified'
- },
- compileMinified: {
- root: 'compile/minified',
- js: 'compile/minified',
- css: 'compile/minified'
- }
- },
- banners: {
- unminified: '/*!\n' +
- ' * ' + pkg.prettyName + ' v' + pkg.version + '\n' +
- ' * ' + pkg.homepage + '\n' +
- ' *\n' +
- ' * Copyright (c) ' + (today.getFullYear()) + ' ' + pkg.author.name +'\n' +
- ' * License: ' + pkg.license + '\n' +
- ' *\n' +
- ' * Generated at ' + gutil.date(today, 'dddd, mmmm dS, yyyy, h:MM:ss TT') + '\n' +
- ' */',
- minified: '/*! ' + pkg.prettyName + ' v' + pkg.version + ' License: ' + pkg.license + ' */'
- }
- };
- // Tasks
- // =====
- // Compile Styles
- gulp.task('styles', function(){
- return gulp.src(Config.paths.source.scss + '/'+pkg.name+'.scss')
- .pipe(compass({
- sass: Config.paths.source.scss,
- css: Config.paths.compileUnminified.css,
- errLogToConsole: true
- }))
- .pipe(prefix('last 2 version', '> 5%', 'safari 5', 'ie 8', 'ie 7', 'opera 12.1', 'ios 6', 'android 4'))
- .pipe(gulp.dest(Config.paths.compileUnminified.css));
- });
- // Compile Scripts
- gulp.task('scripts', function(){
- return gulp.src([
- Config.paths.source.js + '/init.js',
- Config.paths.source.js + '/classes/*.js',
- Config.paths.source.js + '/ng-img-crop.js'
- ])
- .pipe(concat(pkg.name+'.js', {
- separator: '\n\n',
- process: function(src) {
- // Remove all 'use strict'; from the code and
- // replaces all double blank lines with one
- return src.replace(/\r\n/g, '\n')
- .replace(/'use strict';\n+/g, '')
- .replace(/\n\n\s*\n/g, '\n\n');
- }
- }))
- .pipe(concat.header(Config.banners.unminified + '\n' +
- '(function() {\n\'use strict\';\n\n'))
- .pipe(concat.footer('\n}());'))
- .pipe(gulp.dest(Config.paths.compileUnminified.js));
- });
- // Make a Distrib
- gulp.task('dist:js:clean', function(){
- return gulp.src([Config.paths.compileMinified.root + '/**/*.js'], { read: false })
- .pipe(clean());
- });
- gulp.task('dist:css:clean', function(){
- return gulp.src([Config.paths.compileMinified.root + '/**/*.css'], { read: false })
- .pipe(clean());
- });
- gulp.task('dist:js', ['dist:js:clean', 'scripts'], function(){
- return gulp.src(Config.paths.compileUnminified.js + '/**/*.js')
- .pipe(ngAnnotate())
- .pipe(uglify())
- .pipe(header(Config.banners.minified))
- .pipe(gulp.dest(Config.paths.compileMinified.js));
- });
- gulp.task('dist:css', ['dist:css:clean', 'styles'], function(){
- return gulp.src(Config.paths.compileUnminified.css + '/**/*.css')
- .pipe(minifyCss())
- .pipe(gulp.dest(Config.paths.compileMinified.css));
- });
- // Server
- gulp.task('server', function(){
- express()
- .use(express_lr())
- .use(express.static('.'))
- .listen(Config.port);
- gutil.log('Server listening on port ' + Config.port);
- });
- // LiveReload
- gulp.task('livereload', function(){
- lr = tinylr();
- lr.listen(Config.livereloadPort, function(err) {
- if(err) {
- gutil.log('Livereload error:', err);
- }
- });
- refresh_lr=refresh(lr);
- });
- // Watches
- gulp.task('watch', function(){
- gulp.watch(Config.paths.source.scss + '/**/*.scss', ['styles']);
- gulp.watch([Config.paths.source.js + '/**/*.js'], ['scripts']);
- gulp.watch([
- Config.paths.compileUnminified.css + '/**/*.css',
- Config.paths.compileUnminified.js + '/**/*.js',
- Config.testPage
- ], function(evt){
- refresh_lr.changed(evt.path);
- });
- });
- // User commands
- // =============
- // Code linter
- gulp.task('lint', function() {
- return gulp.src(Config.paths.source.js + '/**/*.js')
- .pipe(jshint())
- .pipe(jshint.reporter(jshintStylish));
- });
- // Build
- gulp.task('build', ['dist:js', 'dist:css']);
- // Start server and watch for changes
- gulp.task('default', ['server', 'livereload', 'styles', 'scripts', 'watch'], function(){
- // use the -o arg to open the test page in the browser
- if(argv.o) {
- opn('http://localhost:' + Config.port+'/'+Config.testPage);
- }
- });
|