-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathgulpfile.js
136 lines (123 loc) · 3.73 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
'use strict';
const gulp = require('gulp');
const browserify = require('browserify');
const source = require('vinyl-source-stream');
const tsify = require('tsify');
const gutil = require('gulp-util');
const sourcemaps = require('gulp-sourcemaps');
const buffer = require('vinyl-buffer');
const webserver = require('gulp-webserver');
const awspublish = require('gulp-awspublish');
const parallelize = require('concurrent-transform');
const del = require('del');
let paths = {
pages: ['src/*.html', 'src/*.css', 'src/*.png']
};
let watching = false;
function handleError(err) {
console.error(err.toString());
if (watching) {
this.emit('end'); // jshint ignore:line
} else {
// if you want to be really specific
process.exit(1);
}
}
/**
* Start webserver with live reload
*/
gulp.task('webserver', () => {
gulp.src('dist')
.pipe(webserver({
livereload: true,
path: '/'
}))
.on('error', handleError);
});
/**
* Copy asset files
*/
gulp.task('copy-assets', () => {
return gulp.src(paths.pages)
.pipe(gulp.dest('dist'))
.on('error', handleError);
});
/**
* Bundle JavaScript files generated from TypeScript compilation.
*/
gulp.task('bundle', () => {
return browserify({
basedir: '.',
debug: true,
entries: ['src/main.ts'],
cache: {},
packageCache: {}
})
.on('error', handleError)
.plugin(tsify)
.on('error', handleError)
.bundle()
.on('error', handleError)
.pipe(source('bundle.js'))
.on('error', handleError)
.pipe(buffer())
.on('error', handleError)
.pipe(sourcemaps.init({
loadMaps: true
}))
.on('error', handleError)
.pipe(sourcemaps.write('./'))
.on('error', handleError)
.pipe(gulp.dest('dist'))
.on('error', handleError);
});
/**
* Build and bundle TypeScript, then remove all generated JavaScript files from TypeScript compilation.
*/
gulp.task('build', ['bundle', 'copy-assets'], (cb) => {
let typeScriptGenFiles = [
'src/**/*.js', // path to all JS files auto gen'd by editor
'src/**/*.js.map', // path to all sourcemap files auto gen'd by editor
'!src/lib'
];
// Clean up leftover js files
return del(typeScriptGenFiles, cb);
});
/**
* Publish files to S3
*/
gulp.task('publish', ['build'], () => {
// create a new publisher using S3 options
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property
let publisher = awspublish.create({
region: 'us-west-2',
params: {
Bucket: 'three-ts.selby.io'
},
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});
return gulp.src('./dist/*')
// process in parallelize with concurrency 10
.pipe(parallelize(publisher.publish(), 10))
// sync instead of just posting
.pipe(publisher.sync())
// print upload updates to console
.pipe(awspublish.reporter());
});
gulp.task('watch', () => {
// Watch our assets
watching = true;
let assetWatcher = gulp.watch(paths.pages, ['copy-assets']);
assetWatcher.on('change', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
// Watch our ts
let tsWatcher = gulp.watch('src/**/*.ts', ['build']);
tsWatcher.on('change', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
});
gulp.task('default', ['watch', 'copy-assets', 'webserver', 'build'], () => {
console.log('Started default command');
});