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  };