forked from XimeraProject/xake-node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
99 lines (83 loc) · 2.98 KB
/
gulpfile.js
File metadata and controls
99 lines (83 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"use strict";
var argv = require('yargs').argv,
gulp = require('gulp'),
gutil = require('gulp-util'),
gulpif = require('gulp-if'),
source = require('vinyl-source-stream'),
buffer = require('vinyl-buffer'),
sourcemaps = require('gulp-sourcemaps'),
browserify = require('browserify'),
watchify = require('watchify'),
uglify = require('gulp-uglify'),
aliasify = require('aliasify'),
babelify = require('babelify'),
less = require('gulp-less'),
minifyCSS = require('gulp-minify-css'),
assign = require('lodash.assign');
// Directory where static files are found. Don't forget the slash at the end.
var staticDirectoryCSS = './public/stylesheets/';
// but now I am purposefully forgetting the slash?!
var staticDirectoryJavascripts = './public/javascripts';
// Source and target JS files for Browserify
var jsMainFile = './public/javascripts/main.js';
var jsBundleFile = 'main.min.js';
// Source and target LESS files
var cssMainFile = './public/stylesheets/base.less';
var cssFiles = './public/stylesheets/**/*.less';
// Browserify bundler
var options = {
entries: [jsMainFile],
transform: [
[aliasify],
[babelify, {
global: true,
ignore: /\/node_modules\/(?!syntaxhighlighter|brush-)/,
presets: ["es2015", "react"]
}]
],
extensions: ['.js'],
debug: !argv.production,
cache: {}, packageCache: {}, fullPaths: true // for watchify
};
var completeOptions = assign({}, watchify.args, options);
var bundler = browserify(completeOptions);
function buildPipeline(b) {
return b
.bundle()
.pipe(source(jsBundleFile))
.pipe(buffer())
.pipe(gulpif(!argv.production, sourcemaps.init({loadMaps: true}))) // loads map from browserify file
.pipe(gulpif(!argv.production, sourcemaps.write('./', {sourceMappingURLPrefix: '.'}))) // writes .map file
.pipe(gulpif(argv.production, uglify()))
.pipe(gulp.dest(staticDirectoryJavascripts));
}
// Build JavaScript using Browserify
gulp.task('js', function() {
return buildPipeline(bundler);
});
// Build CSS
gulp.task('css', function(){
return gulp.src(cssMainFile)
.pipe(less())
.pipe(gulpif(argv.production, minifyCSS({keepBreaks:true})))
.pipe(gulp.dest(staticDirectoryCSS));
});
// Watch JS + CSS using watchify + gulp.watch
gulp.task('watchify', function() {
var watcher = watchify(bundler);
return watcher
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.on('log', gutil.log) // output build logs to terminal
.on('update', function () {
buildPipeline(watcher);
gutil.log("Updated JavaScript sources");
})
.bundle() // Create the initial bundle when starting the task
.pipe(source(jsBundleFile))
.pipe(gulp.dest(staticDirectoryCSS));
});
gulp.task('csswatch', function () {
gulp.watch(cssFiles, ['css']);
});
gulp.task('watch', ['watchify', 'csswatch']);
gulp.task('default', ['js', 'css']);