Skip to content
Permalink
Newer
Older
100644 99 lines (88 sloc) 2.99 KB
1
var gulp = require('gulp');
2
var webserver = require("gulp-webserver")
3
var babelify = require('babelify');
4
var browserify = require('browserify');
5
var through2 = require('through2');
6
var del = require('del');
7
var runSequence = require('run-sequence');
8
var merge = require('merge-stream');
9
var envify = require('loose-envify/custom');
10
11
// http://nadikun.com/how-to-add-autoprefixer-to-work-with-bootstrap-using-less/
12
var less = require('gulp-less');
13
var autoprefixer = require('gulp-autoprefixer');
14
var minifyCSS = require('gulp-minify-css');
15
var gutil = require('gulp-util');
16
var sourcemaps = require('gulp-sourcemaps');
17
18
var outputDir = 'novaideo/static';
19
var mapFile = 'main.map.json';
20
var mapOutput = outputDir + '/js/' + mapFile;
21
var env = process.env.NODE_ENV || 'development';
22
23
24
gulp.task('clean', function (cb) {
25
del([
26
outputDir+'/main.*',
27
], cb);
28
});
29
30
gulp.task('browserify', function() {
31
return gulp.src('./novaideo/js/main.js')
32
.pipe(through2.obj(function (file, enc, next) {
33
var bundler = browserify(file.path, {debug: true})
34
.transform(babelify);
35
bundler.transform(envify({ NODE_ENV: env }))
36
if (env === 'production') {
37
bundler.plugin('minifyify', {map: mapFile, output: mapOutput});
38
}
39
bundler.bundle(function (err, res) {
40
if (err) { return next(err); }
41
file.contents = res;
42
next(null, file);
43
});
44
}))
45
.on('error', function (error) {
46
console.log(error.stack);
47
this.emit('end');
48
})
49
.pipe(gulp.dest(outputDir + '/js'));
50
});
51
52
// https://github.com/twbs/bootstrap/blob/master/grunt/configBridge.json#L21
53
var autoprefixers = [
54
"Android 2.3",
55
"Android >= 4",
56
"Chrome >= 20",
57
"Firefox >= 24",
58
"Explorer >= 8",
59
"iOS >= 6",
60
"Opera >= 12",
61
"Safari >= 6"];
62
gulp.task('less', function() {
63
return gulp.src('./novaideo/static/less/bootstrap*.less')
64
.pipe(sourcemaps.init())
65
.pipe(less().on('error', gutil.log))
66
.pipe(autoprefixer(autoprefixers))
67
.pipe(minifyCSS())
68
.pipe(sourcemaps.write('../maps'))
69
.pipe(gulp.dest('./novaideo/static/css/'));
70
});
71
72
// Async task with multiple gulp.src https://github.com/gulpjs/gulp/issues/82
73
gulp.task('copy', function() {
74
return merge(
75
gulp.src('node_modules/bootstrap/fonts/*')
76
.pipe(gulp.dest('novaideo/static/fonts/'))
77
);
78
});
79
80
gulp.task('build', function(callback) {
81
runSequence('clean', ['browserify', 'less', 'copy'], callback);
82
});
83
84
gulp.task('webserver', function() {
85
return gulp.src(outputDir)
86
.pipe(webserver({
87
livereload: false,
88
open: false
89
}));
90
});
91
92
gulp.task('watch', function() {
93
gulp.watch('novaideo/js/**/*.js', ['browserify']);
94
gulp.watch('novaideo/static/less/**/*.less', ['less']);
95
});
96
97
gulp.task('default', function(callback) {
98
runSequence('build', 'webserver', 'watch', callback);
99
});