fex
Version:
A simple command line interface that helps you develop and test Angularjs project.
172 lines (148 loc) • 4.71 kB
JavaScript
var gulp = require('gulp')
, sass = require('gulp-sass')
, coffee = require('gulp-coffee')
, concat = require('gulp-concat')
, uglify = require('gulp-uglify')
, sourcemaps = require('gulp-sourcemaps')
, gutil = require('gulp-util')
, clean = require('gulp-clean')
, runSequence = require('run-sequence')
, config = require('./bower.json')
, fs=require('fs')
, _=require('underscore')
, fexUtil=require('fex-util')
;
_.mixin(require('underscore.string').exports());
var app_name='<%- appName %>'
, bowerComponentFolder='bower_components'
, publicFolder="public"
, publicCssFolder="public/css"
, publicJsFolder="public/js"
, getVendorConfig=function(){
return fexUtil.getVendorConfiguration(bowerComponentFolder,__dirname+'/vendor.conf.js',publicFolder);
}
, UnionConfigs=null
, getUnionConfig=function(){
if(UnionConfigs){
return UnionConfigs;
}
var copyConfigs=getVendorConfig();
if(PATH.copy){
for (var dest in PATH.copy) {
if(!copyConfigs.others[dest]){
copyConfigs.others[dest]=PATH.copy[dest];
}
else{
copyConfigs.others[dest]=_.uniq(_.union(copyConfigs.others[dest],PATH.copy[dest]));
}
};
}
//console.log(copyConfigs);
return copyConfigs;
}
, PATH={
clean:['public','compiled_js'],
copy:{
//Fonts
'public/fonts':['src/fonts/*.{ttf,woff,eof,svg}'],
//Images
'public/images':['src/images/*.*'],
//Views
'public/':['src/**/*.html']
},
compile:{
scss:['src/scss/*.scss'],
coffee:{
scripts:[
'coffee/*.coffee',
'coffee/**/*.coffee'
],
tests:['tests/*.coffee','tests/**/*.coffee']
}
},
views:['src/**/*.html']
};
/* clean task
---------------------------------------*/
gulp.task('fex:clean', function() {
return gulp.src(PATH.clean).pipe(clean());
});
/* copy task
---------------------------------------*/
gulp.task('fex:copy',function() {
var unionConfigs=getUnionConfig();
for(var dest in unionConfigs.others){
var src=unionConfigs.others[dest];
gulp.src(src).pipe(gulp.dest(dest));
}
});
/* contact task
---------------------------------------*/
gulp.task('fex:concat:css', function() {
var unionConfigs=getUnionConfig();
gulp.src(unionConfigs.stylesheets)
.pipe(concat(app_name+'.vendors.css'))
.pipe(gulp.dest(publicCssFolder))
});
gulp.task('fex:concat:js', function() {
var unionConfigs=getUnionConfig();
gulp.src(unionConfigs.scripts)
.pipe(concat(app_name+'.vendors.min.js'))
.pipe(gulp.dest(publicJsFolder))
});
/* Compile task
---------------------------------------*/
gulp.task('fex:compile:scss', function() {
var files='src/scss/core.scss';//PATH.compile.scss;
gulp.src(files)
.pipe(sass())
.pipe(concat(app_name+'.app.css'))
.pipe(gulp.dest(publicCssFolder))
});
gulp.task('fex:compile:scripts', function() {
var files=PATH.compile.coffee.scripts;
gulp.src(files)
.pipe(coffee({bare:true}))
//.pipe(uglify())
.pipe(gulp.dest('compiled_js/scripts/'))
.pipe(concat(app_name+'.app.min.js'))
.pipe(gulp.dest(publicJsFolder))
});
gulp.task('fex:compile:tests', function() {
var files=PATH.compile.coffee.tests;
gulp.src(files)
.pipe(coffee({bare:true}))
.pipe(gulp.dest('compiled_js/tests/'))
});
gulp.task('fex:compile',['fex:compile:scss','fex:compile:scripts','fex:compile:tests']);
gulp.task('fex:concat',['fex:concat:css','fex:concat:js']);
/* build task
---------------------------------------*/
gulp.task('build', function(){
runSequence('fex:clean','fex:copy','fex:concat','fex:compile',function(){
UnionConfigs=null;
console.log('== Finished '+ (new Date()).toTimeString() +' ==');
});
});
gulp.task('build:watch',['build'],function(){
setupWatchs();
});
/* watch task
---------------------------------------*/
var watchs=[];
gulp.task('watch', function() {
setupWatchs();
});
var setupWatchs = function() {
for (var i in watchs) {
if(watchs[i]){
watchs[i].end();
}
};
watchs=[];
watchs.push(gulp.watch(PATH.compile.coffee.scripts, ['build:watch']));
watchs.push(gulp.watch(PATH.compile.coffee.tests, ['build:watch']));
watchs.push(gulp.watch(PATH.compile.scss, ['build:watch']));
watchs.push(gulp.watch(PATH.views, ['build:watch']));
}
gulp.task('default', ['watch','build']);