github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/static/semantic/tasks/build.js (about) 1 /******************************* 2 Build Task 3 *******************************/ 4 5 var 6 gulp = require('gulp'), 7 8 // node dependencies 9 console = require('better-console'), 10 fs = require('fs'), 11 12 // gulp dependencies 13 autoprefixer = require('gulp-autoprefixer'), 14 chmod = require('gulp-chmod'), 15 clone = require('gulp-clone'), 16 flatten = require('gulp-flatten'), 17 gulpif = require('gulp-if'), 18 less = require('gulp-less'), 19 minifyCSS = require('gulp-minify-css'), 20 plumber = require('gulp-plumber'), 21 print = require('gulp-print'), 22 rename = require('gulp-rename'), 23 replace = require('gulp-replace'), 24 uglify = require('gulp-uglify'), 25 26 // config 27 config = require('./config/user'), 28 tasks = require('./config/project/tasks'), 29 install = require('./config/project/install'), 30 31 // shorthand 32 globs = config.globs, 33 assets = config.paths.assets, 34 output = config.paths.output, 35 source = config.paths.source, 36 37 banner = tasks.banner, 38 comments = tasks.regExp.comments, 39 log = tasks.log, 40 settings = tasks.settings 41 ; 42 43 // add internal tasks (concat release) 44 require('./collections/internal')(gulp); 45 46 module.exports = function(callback) { 47 48 var 49 stream, 50 compressedStream, 51 uncompressedStream 52 ; 53 54 console.info('Building Semantic'); 55 56 if( !install.isSetup() ) { 57 console.error('Cannot build files. Run "gulp install" to set-up Semantic'); 58 return; 59 } 60 61 // check for right-to-left language 62 if(config.rtl === true || config.rtl === 'Yes') { 63 gulp.start('build-rtl'); 64 return; 65 } 66 67 // unified css stream 68 stream = gulp.src(source.definitions + '/**/' + globs.components + '.less') 69 .pipe(plumber()) 70 .pipe(less(settings.less)) 71 .pipe(autoprefixer(settings.prefix)) 72 .pipe(replace(comments.variables.in, comments.variables.out)) 73 .pipe(replace(comments.license.in, comments.license.out)) 74 .pipe(replace(comments.large.in, comments.large.out)) 75 .pipe(replace(comments.small.in, comments.small.out)) 76 .pipe(replace(comments.tiny.in, comments.tiny.out)) 77 .pipe(flatten()) 78 ; 79 80 // two concurrent streams from same source to concat release 81 uncompressedStream = stream.pipe(clone()); 82 compressedStream = stream.pipe(clone()); 83 84 // uncompressed component css 85 uncompressedStream 86 .pipe(plumber()) 87 .pipe(replace(assets.source, assets.uncompressed)) 88 .pipe(gulpif(config.hasPermission, chmod(config.permission))) 89 .pipe(gulp.dest(output.uncompressed)) 90 .pipe(print(log.created)) 91 .on('end', function() { 92 gulp.start('package uncompressed css'); 93 }) 94 ; 95 96 // compressed component css 97 compressedStream = stream 98 .pipe(plumber()) 99 .pipe(clone()) 100 .pipe(replace(assets.source, assets.compressed)) 101 .pipe(minifyCSS(settings.minify)) 102 .pipe(rename(settings.rename.minCSS)) 103 .pipe(gulpif(config.hasPermission, chmod(config.permission))) 104 .pipe(gulp.dest(output.compressed)) 105 .pipe(print(log.created)) 106 .on('end', function() { 107 callback(); 108 gulp.start('package compressed css'); 109 }) 110 ; 111 112 // copy assets 113 gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*') 114 .pipe(gulpif(config.hasPermission, chmod(config.permission))) 115 .pipe(gulp.dest(output.themes)) 116 ; 117 118 // copy source javascript 119 gulp.src(source.definitions + '/**/' + globs.components + '.js') 120 .pipe(plumber()) 121 .pipe(flatten()) 122 .pipe(replace(comments.license.in, comments.license.out)) 123 .pipe(gulp.dest(output.uncompressed)) 124 .pipe(gulpif(config.hasPermission, chmod(config.permission))) 125 .pipe(print(log.created)) 126 .pipe(uglify(settings.uglify)) 127 .pipe(rename(settings.rename.minJS)) 128 .pipe(gulp.dest(output.compressed)) 129 .pipe(gulpif(config.hasPermission, chmod(config.permission))) 130 .pipe(print(log.created)) 131 .on('end', function() { 132 gulp.start('package compressed js'); 133 gulp.start('package uncompressed js'); 134 }) 135 ; 136 137 };