CliffbreakTS-Viewer/server/gulpfile.js

144 lines
5 KiB
JavaScript
Raw Normal View History

2020-04-29 09:33:39 +00:00
const { dest, parallel, series, src, watch } = require('gulp'),
changed = require('gulp-changed'),
conventionalChangelog = require('gulp-conventional-changelog'),
dateFormat = require('dateformat'),
del = require('del'),
path = require('path'),
rename = require('gulp-rename'),
sass = require('gulp-sass'),
ts = require('gulp-typescript'),
uglifycss = require('gulp-uglifycss'),
webpack = require('webpack-stream');
require('dotenv').config();
function clean() {
return del(
[
'./dist/',
'./../webapp/assets/css/',
'./../webapp/assets/fonts/',
'./../webapp/assets/js/',
], { force: true }); // Force option needed to delete files outside of project dir
}
function compileJavaScript() {
return src('./../webapp/src/js/app.js')
.pipe(webpack({
entry: {
app: './../webapp/src/js/app.js',
},
output: {
filename: '[name].js',
},
optimization: {
splitChunks: {
chunks: 'all',
},
},
mode: process.env.PRODUCTION ? 'production' : 'development',
resolve: {
modules: [
path.resolve('./../server/node_modules'),
],
extensions: ['.js', '.json'],
// alias: {
// handlebars: 'handlebars/dist/handlebars.min.js',
// },
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
query: {
presets: [
[
'@babel/preset-env',
{
targets: {
chrome: 78,
},
},
],
],
},
},
],
},
}).on('error', function () { this.emit('end'); }))
.pipe(dest('./../webapp/assets/js/'));
}
function compileScss() {
return src('./../webapp/src/scss/*.scss')
.pipe(sass({ outputStyle: 'compressed', includePaths: ['./../server/node_modules/'] })).on('error', sass.logError)
.pipe(dest('./../webapp/assets/css/'));
}
function compileTypeScript() {
const tsProject = ts.createProject('tsconfig.json');
// do not compile tests in production
tsProject.config.exclude = !tsProject.config.exclude ? ['test'] : tsProject.config.exclude.push('test');
return tsProject.src()
.pipe(tsProject())
.js.pipe(dest('./dist/'));
}
function installMaterialIcons() {
src(
'./node_modules/material-design-icons/iconfont/*.css')
.pipe(uglifycss())
.pipe(changed('./../webapp/assets/fonts/material-icons/'))
.pipe(dest('./../webapp/assets/fonts/material-icons/'));
return src(
'./node_modules/material-design-icons/iconfont/*',
{ ignore: ['**/README.md', '**/codepoints', '**/*.ijmap'] })
.pipe(changed('./../webapp/assets/fonts/material-icons/'))
.pipe(dest('./../webapp/assets/fonts/material-icons/'));
}
function installRoboto() {
src('./node_modules/typeface-roboto/files/*')
.pipe(changed('./../webapp/assets/fonts/roboto/files/'))
.pipe(dest('./../webapp/assets/fonts/roboto/files/'));
return src('./node_modules/typeface-roboto/index.css')
.pipe(rename('roboto.css'))
.pipe(uglifycss())
.pipe(changed('./../webapp/assets/fonts/roboto/'))
.pipe(dest('./../webapp/assets/fonts/roboto/'));
}
function watchCompile() {
watch('./../webapp/src/scss/*.scss', { ignoreInitial: false }, compileScss);
watch('./../webapp/src/js/*.js', { ignoreInitial: false }, compileJavaScript);
}
function changelog() {
return src('../CHANGELOG.md')
.pipe(conventionalChangelog({
// conventional-changelog options go here
preset: 'angular',
// releaseCount: 0, // Uncomment to regenerate whole changelog
}, {
// context goes here
commit: 'commit',
date: dateFormat(new Date(), 'dd.mm.yyyy', true),
}, {
// git-raw-commits options go here
}, {
// conventional-commits-parser options go here
}, {
// conventional-changelog-writer options go here
}))
.pipe(dest('../'));
}
exports.clean = clean;
exports.compileFonts = parallel(installMaterialIcons, installRoboto);
exports.compile = parallel(compileScss, compileJavaScript, compileTypeScript, exports.compileFonts);
exports.watchCompile = series(clean, exports.compileFonts, watchCompile);
exports.build = series(clean, exports.compile);
exports.changelog = changelog;
exports.default = exports.build;