/
Gulpfile.js
137 lines (115 loc) · 3.35 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
129
130
131
132
133
134
135
136
137
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var filter = require('gulp-filter');
var package = require('./package.json');
var banner = '/*! <%= name %> - v<%= version %> */';
var GLOB_SERVER_SRC = './src/server/**/*';
var DIR_SERVER_COMPILED = './dist/server';
var GLOB_COMPONENTS_SRC = './src/components/**/*';
var DIR_COMPONENTS_COMPILED = './dist/components';
var GLOB_CLIENT_SRC = './src/client/**/*';
var DIR_CLIENT_PUBLIC = './dist/client';
var FILE_BROWSERIFY_INDEX = './src/client/index.js';
/**
* Compile ES6 -> ES5.1
*/
gulp.task('compile:client', function() {
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var header = require('gulp-header');
var exportName = package.name.replace('-', '');
var fileName = package.name.toLocaleLowerCase();
return gulp.src(FILE_BROWSERIFY_INDEX)
.pipe(bufferedBrowserify(exportName))
.pipe(header(banner, {name: fileName, version: package.version}))
.pipe(rename(fileName + '.js'))
.pipe(gulp.dest(DIR_CLIENT_PUBLIC))
.pipe(plumber())
.pipe(uglify({
preserveComments: 'some'
}))
.pipe(rename(fileName + '.min.js'))
.pipe(gulp.dest(DIR_CLIENT_PUBLIC))
});
gulp.task('compile:components', function() {
var to5 = require('gulp-6to5');
var jsFilter = filter('**/*.js');
return gulp.src(GLOB_COMPONENTS_SRC)
.pipe(jsFilter)
.pipe(plumber())
.pipe(to5({
experimental : false,
runtime : true
}))
.pipe(jsFilter.restore())
.pipe(gulp.dest(DIR_COMPONENTS_COMPILED));
});
gulp.task('compile:server', function() {
var to5 = require('gulp-6to5');
var jsFilter = filter('**/*.js');
return gulp.src(GLOB_SERVER_SRC)
.pipe(jsFilter)
.pipe(plumber())
.pipe(to5({
experimental : false,
runtime : true
}))
.pipe(jsFilter.restore())
.pipe(gulp.dest(DIR_SERVER_COMPILED));
});
/**
* Build & Watch
*/
gulp.task('build', function() {
gulp.start('build:client', 'build:server');
});
gulp.task('build:client', function() {
gulp.start('compile:client');
});
gulp.task('build:server', function() {
gulp.start('compile:server', 'compile:components');
});
gulp.task('watch', function() {
gulp.watch(GLOB_CLIENT_SRC, function() {
gulp.start('build:client');
});
gulp.watch(GLOB_SERVER_SRC, function() {
gulp.start('build:server');
});
gulp.watch(GLOB_COMPONENTS_SRC, function() {
gulp.start('build:server', 'build:client');
});
});
/**
* Utilities
*/
gulp.task('pretest', function() {
gulp.start('build:client', 'build:test-client');
});
function bufferedBrowserify(standaloneName) {
var transform = require('vinyl-transform');
var globify = require('require-globify');
var browserify = require('browserify');
var to5ify = require('6to5ify');
return transform(function(filename) {
return browserify(filename, {
standalone : standaloneName,
debug : true,
noParse : [
require.resolve('6to5/runtime'),
require.resolve('6to5/browser-polyfill')
]
})
.transform(to5ify.configure({
experimental : false,
runtime : true
}))
.transform(globify)
.bundle()
.on('error', function(err){
console.error(err.message);
this.emit('end');
})
;
});
}