-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathgulpfile.js
129 lines (115 loc) · 3.46 KB
/
gulpfile.js
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
"use strict";
var browserify = require('browserify');
var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var path = require('path');
var supervisor = require('gulp-supervisor');
var watch = require('gulp-watch');
var batch = require('gulp-batch');
var jshint = require('gulp-jshint');
var react = require('gulp-react');
var reporter = 'jshint-stylish';
var concat = require('gulp-concat');
var less = require('gulp-less');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer-core');
var mqpacker = require('css-mqpacker');
var del = require('del');
////////
gulp.task('clean', function(callback) {
del(['dist/**'], callback);
});
////////
gulp.task('less', [], function () {
var postProcessors = [
autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'ie 8', 'ie 9'], cascade: false}),
mqpacker
];
var stream = gulp.src(['./src/app.less'])
.pipe(sourcemaps.init())
.pipe(less())
.pipe(concat('app.css'))
.pipe(postcss(postProcessors))
.pipe(sourcemaps.write('.', {sourceRoot: '/src'}))
.pipe(gulp.dest('./dist'));
return stream;
});
////////
gulp.task('lintJs', function() {
return gulp.src([
'./src/**/*.js',
'./server/**/*.js',
'!server/index.js'
])
.pipe(react())
.on('error', function(e) {
console.error(e.message + '\n in ' + e.fileName);
})
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter(reporter))
.pipe(jshint.reporter('fail'));
});
////////
gulp.task('browserify', function(callback) {
var bundler = browserify({
// Required watchify args
cache: {}, packageCache: {}, fullPaths: false,
// Specify the entry point of your app
entries: __dirname + '/src/client.js',
// Add file extentions to make optional in your requires
extensions: ['.jsx'],
// Enable source maps!
debug: true,
// Search path to resolve absolute paths in require statements
paths: [path.resolve(__dirname, '../../src')],
basedir: path.resolve(__dirname, '../..')
});
var bundle = function() {
bundler
.bundle()
// Use vinyl-source-stream to make the
// stream gulp compatible.
.pipe(source('bundle.js'))
// Uglify doesn't support streams, so buffer
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sourcemaps.write('./', {sourceRoot: '/'}))
// Specify the output destination
.pipe(gulp.dest('./dist'))
.on('end', callback);
};
return bundle();
});
////////
gulp.task('setWatch', function() {
global.isWatching = true;
});
function batchTask(task) {
return batch(function () {
console.log("RUNNING TASK: " + task);
gulp.start(task);
});
}
gulp.task('watch', ['build', 'setWatch'], function() {
watch([
'./src/**/*.js',
'./server/**/*.js',
'./gulp/**/*.js',
'!server/index.js'
], batchTask('lintJs'));
watch([
'./src/**/*.less'
], batchTask('less'));
watch([
'./src/**/*.jsx'
], batchTask('browserify'));
supervisor( 'server', {
watch: 'server',
pollInterval: 200
});
});
////////
gulp.task('build', ['lintJs', 'browserify', 'less']);
gulp.task('default', ['clean', 'build', 'watch']);