dispatch/client/gulpfile.js

134 lines
2.8 KiB
JavaScript
Raw Normal View History

2015-12-28 23:34:32 +00:00
var path = require('path');
2015-04-29 22:45:02 +00:00
var exec = require('child_process').exec;
2016-01-25 00:01:37 +00:00
var url = require('url');
2015-04-29 22:45:02 +00:00
2015-01-17 01:37:21 +00:00
var gulp = require('gulp');
2015-06-07 22:11:03 +00:00
var gutil = require('gulp-util');
2015-12-28 23:34:32 +00:00
var express = require('express');
2016-01-25 00:01:37 +00:00
var proxy = require('express-http-proxy');
2015-12-28 23:34:32 +00:00
var webpack = require('webpack');
2017-04-14 02:33:44 +00:00
var through = require('through2');
var br = require('brotli');
2018-05-16 01:46:42 +00:00
var del = require('del');
2017-04-14 02:33:44 +00:00
function brotli(opts) {
return through.obj(function(file, enc, callback) {
if (file.isNull()) {
return callback(null, file);
}
if (file.isStream()) {
2018-04-05 23:46:22 +00:00
this.emit(
'error',
new gutil.PluginError('brotli', 'Streams not supported')
);
2017-04-14 02:33:44 +00:00
} else if (file.isBuffer()) {
file.path += '.br';
2018-10-06 06:09:29 +00:00
file.contents = Buffer.from(br.compress(file.contents, opts).buffer);
2017-04-14 02:33:44 +00:00
return callback(null, file);
}
});
}
2015-06-07 22:11:03 +00:00
2018-05-16 01:46:42 +00:00
function clean() {
return del(['dist']);
2018-05-16 03:02:48 +00:00
}
2018-05-16 01:46:42 +00:00
function js(cb) {
2015-12-28 23:34:32 +00:00
var config = require('./webpack.config.prod.js');
var compiler = webpack(config);
2015-01-17 01:37:21 +00:00
2015-12-28 23:34:32 +00:00
process.env['NODE_ENV'] = 'production';
2015-06-07 22:11:03 +00:00
2015-12-28 23:34:32 +00:00
compiler.run(function(err, stats) {
if (err) throw new gutil.PluginError('webpack', err);
2015-06-07 22:11:03 +00:00
2018-04-05 23:46:22 +00:00
gutil.log(
'[webpack]',
stats.toString({
colors: true
})
);
if (stats.hasErrors()) process.exit(1);
2015-12-28 23:34:32 +00:00
cb();
});
2018-05-16 01:46:42 +00:00
}
2015-06-01 22:09:28 +00:00
2018-05-16 01:46:42 +00:00
function config() {
return gulp.src('../config.default.toml').pipe(gulp.dest('dist'));
}
2015-02-16 20:53:01 +00:00
2018-05-16 01:46:42 +00:00
function fonts() {
return gulp.src('src/font/*(*.woff|*.woff2)').pipe(gulp.dest('dist/font'));
}
2016-02-03 01:22:45 +00:00
2015-12-28 23:34:32 +00:00
function compress() {
2018-04-05 23:46:22 +00:00
return gulp
2018-11-08 08:39:32 +00:00
.src(['dist/**/!(*.dev.js|*.map|*.toml|*.json|*.woff|*.woff2)'])
2017-04-14 02:33:44 +00:00
.pipe(brotli({ quality: 11 }))
2018-05-16 01:46:42 +00:00
.pipe(gulp.dest('dist'));
2015-12-28 23:34:32 +00:00
}
2018-05-16 01:46:42 +00:00
function cleanup() {
2018-11-08 08:39:32 +00:00
return del(['dist/**/*(*.js|*.css|*.map)']);
2018-05-16 01:46:42 +00:00
}
2015-12-28 23:34:32 +00:00
2018-05-16 01:46:42 +00:00
function bindata(cb) {
2018-04-05 23:46:22 +00:00
exec(
2018-05-16 01:46:42 +00:00
'go-bindata -nomemcopy -nocompress -pkg assets -o ../assets/bindata.go -prefix "dist" dist/...',
2018-04-05 23:46:22 +00:00
cb
);
2018-05-16 01:46:42 +00:00
}
2015-02-05 00:37:34 +00:00
2018-05-16 01:46:42 +00:00
function serve() {
2018-04-13 18:47:39 +00:00
var config = require('./webpack.config.dev.js');
var compiler = webpack(config);
var app = express();
app.use(
require('webpack-dev-middleware')(compiler, {
noInfo: true,
publicPath: config.output.publicPath,
headers: {
'Access-Control-Allow-Origin': '*'
}
})
2018-04-05 23:46:22 +00:00
);
2018-04-13 18:47:39 +00:00
app.use(require('webpack-hot-middleware')(compiler));
2018-04-05 23:46:22 +00:00
2018-04-13 18:47:39 +00:00
app.use('/', express.static('dist'));
2018-04-05 23:46:22 +00:00
2018-04-13 18:47:39 +00:00
app.use(
'*',
proxy('localhost:1337', {
proxyReqPathResolver: function(req) {
return req.originalUrl;
2018-04-05 23:46:22 +00:00
}
2018-04-13 18:47:39 +00:00
})
);
app.listen(3000, function(err) {
if (err) {
console.log(err);
return;
}
2018-04-05 23:46:22 +00:00
2018-04-13 18:47:39 +00:00
console.log('Listening at http://localhost:3000');
});
2018-05-16 01:46:42 +00:00
}
2018-06-01 20:05:19 +00:00
const assets = gulp.parallel(js, config, fonts);
2018-05-16 01:46:42 +00:00
const build = gulp.series(clean, assets, compress, cleanup, bindata);
2018-05-16 03:02:48 +00:00
const dev = gulp.series(
clean,
gulp.parallel(serve, fonts, gulp.series(config, bindata))
);
2015-12-28 23:34:32 +00:00
2018-05-16 01:46:42 +00:00
gulp.task('build', build);
gulp.task('default', dev);