Skip to content

Instantly share code, notes, and snippets.

@youknowriad
Last active July 24, 2019 20:19

Revisions

  1. Riad Benguella revised this gist Feb 17, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gulpfile.js
    Original file line number Diff line number Diff line change
    @@ -229,7 +229,7 @@ gulp.task("release/index", ['release/index-rev'], function() {
    // Watch
    gulp.task('watch', function() {
    gulp.watch(config.es5EntryFiles, ['build/es5']);
    gulp.watch(config.es6EntryFile, ['build/es6']);
    gulp.watch(config.es6Files, ['build/es6']);
    gulp.watch(config.lessEntry, ['build/less']);
    gulp.watch(config.fontsEntry, ['build/fonts']);
    gulp.watch(config.imagesEntry, ['build/images']);
  2. Riad Benguella revised this gist Feb 17, 2015. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gulpfile.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    var gulp = require('gulp');
    var browserify = require('browserify');
    var to5Browserify = require('6to5-browserify');
    var babelify = require('babelify');
    var del = require('del');
    var source = require('vinyl-source-stream');
    var _ = require('lodash');
    @@ -98,7 +98,7 @@ gulp.task('prepare/es6', function() {

    gulp.task('build/es6', ['prepare/es6'], function() {
    return browserify(config.es6EntryFile, { debug: true })
    .transform(to5Browserify)
    .transform(babelify)
    .bundle()
    .on('error', function(err) { console.log('Error: ' + err.message); })
    .pipe(source(config.outputJSES6File))
  3. Riad Benguella created this gist Feb 17, 2015.
    256 changes: 256 additions & 0 deletions gulpfile.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,256 @@
    var gulp = require('gulp');
    var browserify = require('browserify');
    var to5Browserify = require('6to5-browserify');
    var del = require('del');
    var source = require('vinyl-source-stream');
    var _ = require('lodash');
    var extReplace = require('gulp-ext-replace');
    var less = require('gulp-less');
    var gulpMerge = require('merge-stream');
    var ngTemplates = require('gulp-ng-templates');
    var concat = require('gulp-concat');
    var wrap = require("gulp-wrap");
    var ngAnnotate = require('gulp-ng-annotate');
    var jshint = require('gulp-jshint');
    var jscs = require('gulp-jscs');
    var uglify = require('gulp-uglify');
    var runSequence = require('run-sequence');
    var rev = require("gulp-rev");
    var replace = require("gulp-replace");
    var karma = require('karma').server;
    var minifyHTML = require('gulp-minify-html');

    var output = './public';
    var config = {
    outputDir: output,
    tmpDir: './tmp',

    es6Files: './src/js/**/*.es6',
    es6EntryFile: './tmp/es6/app.js',
    es6TmpDir: './tmp/es6',
    es6TmpOutputDir: './tmp/es6-output',
    es5EntryFiles: './src/js/**/*.js',
    outputJSES5File: 'app-es5.js',
    outputJSES6File: 'app-es6.js',
    outputJSDir: output + '/js',

    lessEntry: './src/less/main.less',
    outputCssDir: output + '/css',

    fontsEntry: [
    './components/font-awesome/fonts/*'
    // Other fonts
    ],
    outputFontsDir: output + '/font',

    imagesEntry: ['./src/images/**'],
    outputImagesDir: output + '/images',

    partialsConfig: {
    './src/partials/**': '/'
    // Other partials
    },
    partialsTmpDir: './tmp/partials',
    outputPartialsFile: 'templates.js',

    localesConfig: {
    './src/locales/**': '/'
    // Other locales
    },
    outputLocalesDir: output + '/locales',

    indexEntry: './src/index.html',
    outputIndex: output + '/index.html',

    vendorsJsEntry: [
    './components/angular/angular.min.js'
    // Other ES5 vendors
    ],
    outputJSVendorsFile: 'vendor.js',

    vendorsCssEntry: [
    './components/select2/select2.css'
    // Other CSS vendors
    ],
    outputVendorsCssFile: 'vendor.css',

    jscsConfig: './src/pmsipilot.jscs.json'
    };

    gulp.task('build', ['build/index', 'build/es5', 'build/es6', 'build/less', 'build/fonts', 'build/images', 'build/partials', 'build/locales', 'build/js/vendor', 'build/css/vendor']);

    gulp.task('release', function() {
    runSequence('clean', 'build', 'release/js', 'release/index');
    });

    gulp.task('clean', function(done){
    del(config.outputDir, function() {
    del(config.tmpDir, done);
    });
    });

    // Build Javascripts
    gulp.task('prepare/es6', function() {
    return gulp.src(config.es6Files)
    .pipe(extReplace('.js'))
    .pipe(gulp.dest(config.es6TmpDir));
    });

    gulp.task('build/es6', ['prepare/es6'], function() {
    return browserify(config.es6EntryFile, { debug: true })
    .transform(to5Browserify)
    .bundle()
    .on('error', function(err) { console.log('Error: ' + err.message); })
    .pipe(source(config.outputJSES6File))
    .pipe(ngAnnotate())
    .pipe(wrap('<%= contents %>\nloadES5Query();'))
    .pipe(gulp.dest(config.outputJSDir));
    });

    gulp.task('build/es5', function() {
    return gulp.src(config.es5EntryFiles)
    .pipe(jshint())
    .pipe(jshint.reporter('jshint-stylish'))
    .pipe(jshint.reporter('fail'))
    .pipe(jscs({ configPath: config.jscsConfig }))
    .pipe(concat(config.outputJSES5File))
    .pipe(ngAnnotate())
    .pipe(wrap('function loadES5Query(){\n<%= contents %>\n};'))
    .pipe(gulp.dest(config.outputJSDir));
    });

    // Build Less
    gulp.task('build/less', function() {
    return gulp.src(config.lessEntry)
    .pipe(less())
    .pipe(gulp.dest(config.outputCssDir));
    });

    // Build Fonts
    gulp.task('build/fonts', function() {
    return gulp.src(config.fontsEntry)
    .pipe(gulp.dest(config.outputFontsDir));
    });

    // Build Images
    gulp.task('build/images', function() {
    return gulp.src(config.imagesEntry)
    .pipe(gulp.dest(config.outputImagesDir));
    });

    // Build Partials
    gulp.task('prepare/partials', function() {
    var merge;
    Object.keys(config.partialsConfig).forEach(function(srcDir) {
    var destDir = config.partialsTmpDir + config.partialsConfig[srcDir];
    var stream = gulp.src(srcDir)
    .pipe(gulp.dest(destDir));
    merge = merge ? gulpMerge(merge, stream) : stream;
    });
    return merge;
    });

    gulp.task('build/partials', ['prepare/partials'], function() {
    return gulp.src(config.partialsTmpDir + '/**/*.html')
    .pipe(minifyHTML())
    .pipe(ngTemplates({
    module: 'pmsipilot-templates',
    filename: config.outputPartialsFile,
    path: function (path, base) {
    return 'partials/' + path.replace(base, '');
    }
    }))
    .pipe(gulp.dest(config.outputJSDir));
    });

    // Build Locales
    gulp.task('build/locales', function() {
    var merge;
    Object.keys(config.localesConfig).forEach(function(srcDir) {
    var destDir = config.outputLocalesDir + config.localesConfig[srcDir];
    var stream = gulp.src(srcDir)
    .pipe(gulp.dest(destDir));
    merge = merge ? gulpMerge(merge, stream) : stream;
    });
    return merge;
    });

    // Build Index
    gulp.task('build/index', function() {
    gulp.src(config.indexEntry)
    .pipe(gulp.dest(config.outputDir));
    });

    // Build Vendors
    gulp.task('build/js/vendor', function() {
    gulp.src(config.vendorsJsEntry)
    .pipe(concat(config.outputJSVendorsFile))
    .pipe(gulp.dest(config.outputJSDir));
    });

    // Build Vendors CSS
    gulp.task('build/css/vendor', function() {
    gulp.src(config.vendorsCssEntry)
    .pipe(concat(config.outputVendorsCssFile))
    .pipe(gulp.dest(config.outputCssDir));
    });

    // Release JS
    gulp.task('release/js', function() {
    gulp.src([
    config.outputJSDir + '/' + config.outputJSES5File,
    config.outputJSDir + '/' + config.outputJSES6File,
    config.outputJSDir + '/' + config.outputPMSIJSVendorsFile,
    config.outputJSDir + '/' + config.outputPMSIGlobalJSVendorsFile
    ])
    .pipe(uglify())
    .pipe(gulp.dest(config.outputJSDir));
    });

    // Release Index "Rev"
    gulp.task("release/index-rev", function() {
    return gulp.src([config.outputJSDir + '/**/*.js', config.outputCssDir + '/**/*.css'], { base: config.outputDir })
    .pipe(rev())
    .pipe(gulp.dest(config.outputDir))
    .pipe(rev.manifest())
    .pipe(gulp.dest(config.tmpDir));
    });

    gulp.task("release/index", ['release/index-rev'], function() {
    var manifest = require(config.tmpDir + "/rev-manifest.json");
    var stream = gulp.src(config.outputIndex);

    Object.keys(manifest).reduce(function(stream, key){
    del(key);
    return stream.pipe(replace(key.replace(__dirname + '/public/', ''), manifest[key]));
    }, stream).pipe(gulp.dest(config.outputDir));
    });

    // Watch
    gulp.task('watch', function() {
    gulp.watch(config.es5EntryFiles, ['build/es5']);
    gulp.watch(config.es6EntryFile, ['build/es6']);
    gulp.watch(config.lessEntry, ['build/less']);
    gulp.watch(config.fontsEntry, ['build/fonts']);
    gulp.watch(config.imagesEntry, ['build/images']);
    gulp.watch(Object.keys(config.partialsConfig), ['build/partials']);
    gulp.watch(Object.keys(config.localesConfig), ['build/locales']);
    gulp.watch('gulpfile.js', ['build']);
    });

    // Karma jenkins
    gulp.task('jenkins', ['build'], function (done) {
    karma.start({
    configFile: __dirname + '/test/unit/karma.conf.js',
    reporters: ['progress', 'junit'],
    singleRun: true
    }, done);
    });

    // Karma test
    gulp.task('test', ['build'], function (done) {
    karma.start({
    configFile: __dirname + '/test/unit/karma.conf.js',
    singleRun: true
    }, done);
    });