Skip to content

Instantly share code, notes, and snippets.

@johnstew
Last active January 18, 2020 12:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnstew/44c247246f1e08790e24 to your computer and use it in GitHub Desktop.
Save johnstew/44c247246f1e08790e24 to your computer and use it in GitHub Desktop.
Gulp, Browserify, Multiple Entry Points
'use strict';
var gulp = require('gulp');
var sass = require('gulp-sass');
var connect = require('gulp-connect');
var watch = require('gulp-watch');
var batch = require('gulp-batch');
var gutil = require('gulp-util');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var nodemon = require('gulp-nodemon');
var neat = require('node-neat').includePaths;
var bourbon = require('node-bourbon').includePaths;
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var glob = require('glob');
var rename = require('gulp-rename');
var es = require('event-stream');
var livereload = require('gulp-livereload');
var config = {
dev: {
watch: {
es6: './public/es6/**/*.js'
},
sass: './public/sass/**/*.scss',
es6: './public/es6/bundles/**/*.js',
js: [''], // order matters, mmk?
backend: {
start: 'index.js',
watch: ['./app/', './index.js']
},
views: './app/views/*.jade'
},
prod: {
watch: {
css: './public/css/**/*.css',
js: './public/js/**/*.js'
},
css: './public/css/',
html: './',
js: './public/js/vendor/prod/',
es6: './public/js/'
}
};
// livereload start
livereload({start: true});
gulp.task('node', function() {
nodemon({
script: config.dev.backend.start,
watch: config.dev.backend.watch
});
});
gulp.task('sass', function() {
gulp.src(config.dev.sass)
.pipe(sass({
includePaths: [].concat(bourbon,neat)
}).on('error', sass.logError))
.pipe(gulp.dest(config.prod.css))
.pipe(livereload());
});
gulp.task('es6', function() {
glob(config.dev.es6, function(err, files) {
if (err) {
gutil.log(gutil.colors.red('Glob error:'),err);
}
var tasks = files.map(function(entry) {
return browserify(entry)
.transform('babelify')
.bundle()
.on('error', function(e) {
gutil.log(gutil.colors.red('Browserify compile error:'),e.message);
})
.pipe(source(entry))
.pipe(rename(entry.split('/')[4].split('.')[0] + '.bundle.js'))
.pipe(gulp.dest(config.prod.es6));
});
es.merge(tasks).on('end', function() {
gutil.log(gutil.colors.blue('Event Stream merge tasks completed.'));
livereload();
});
});
});
gulp.task('js', function() {
gulp.src(config.dev.js)
.pipe(concat('vendor.js'))
.pipe(uglify())
.pipe(gulp.dest(config.prod.js));
});
gulp.task('watch', function() {
watch(config.dev.sass, batch(function(events, done) {
gulp.start('sass', done);
}));
watch(config.dev.watch.es6, batch(function(events, done) {
gulp.start('es6', done);
}));
});
gulp.task('default', ['sass','es6','js','node','watch']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment