2020-08-18 14:49:27 +08:00
|
|
|
const {
|
|
|
|
src,
|
|
|
|
dest,
|
|
|
|
series,
|
|
|
|
parallel
|
|
|
|
} = require('gulp')
|
2020-08-13 01:10:08 +08:00
|
|
|
const babel = require('gulp-babel')
|
2020-08-13 03:36:20 +08:00
|
|
|
const babelCore = require('@babel/core')
|
|
|
|
const cleanCSS = require('gulp-clean-css')
|
|
|
|
const cleanCSS2 = require('clean-css')
|
|
|
|
|
2020-08-13 01:10:08 +08:00
|
|
|
const fs = require('fs')
|
2020-08-13 03:36:20 +08:00
|
|
|
const debug = require('gulp-debug')
|
2020-08-13 01:10:08 +08:00
|
|
|
const revHash = require('rev-hash')
|
2020-08-13 03:36:20 +08:00
|
|
|
const replace = require('gulp-replace')
|
|
|
|
const filter = require('gulp-filter')
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-08-13 03:36:20 +08:00
|
|
|
const BABEL_OPTIONS = {
|
|
|
|
presets: ['@babel/preset-env', '@babel/preset-react'],
|
|
|
|
plugins: ['@babel/plugin-proposal-class-properties'],
|
|
|
|
minified: true
|
2020-08-13 01:10:08 +08:00
|
|
|
}
|
|
|
|
|
2020-10-16 21:53:44 +08:00
|
|
|
const WEB_ROOT = '../src/main/resources/web'
|
|
|
|
const OUT_ROOT = '../target/classes/web'
|
|
|
|
|
2020-08-13 03:36:20 +08:00
|
|
|
function compileJs(cb) {
|
2020-10-16 21:53:44 +08:00
|
|
|
return src(`${WEB_ROOT}/assets/js/**/*.js`)
|
2020-08-13 03:36:20 +08:00
|
|
|
.pipe(
|
|
|
|
babel(BABEL_OPTIONS)
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-08-18 14:49:27 +08:00
|
|
|
debug({
|
|
|
|
title: 'Compiled : '
|
|
|
|
})
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
dest(`${OUT_ROOT}/assets/js`)
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
}
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-08-13 03:36:20 +08:00
|
|
|
function compileCss(cb) {
|
2020-10-16 21:53:44 +08:00
|
|
|
return src(`${WEB_ROOT}/assets/css/**/*.css`)
|
2020-08-13 03:36:20 +08:00
|
|
|
.pipe(
|
|
|
|
cleanCSS()
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-08-18 14:49:27 +08:00
|
|
|
debug({
|
|
|
|
title: 'Compiled : '
|
|
|
|
})
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
dest(`${OUT_ROOT}/assets/css`)
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
}
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-08-13 03:36:20 +08:00
|
|
|
const _assetsHexCached = {}
|
2020-08-18 14:49:27 +08:00
|
|
|
|
2020-08-13 03:36:20 +08:00
|
|
|
function _assetsHex(file) {
|
|
|
|
let hex = _assetsHexCached[file]
|
|
|
|
if (!hex) {
|
2020-10-16 21:53:44 +08:00
|
|
|
hex = revHash(fs.readFileSync(`${WEB_ROOT}${file}`))
|
2020-08-13 03:36:20 +08:00
|
|
|
_assetsHexCached[file] = hex
|
|
|
|
}
|
|
|
|
return hex
|
|
|
|
}
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-10-16 21:53:44 +08:00
|
|
|
function compileHtml(cb) {
|
|
|
|
return src(`${WEB_ROOT}/**/*.html`)
|
|
|
|
.pipe(filter(file => !/node_modules/.test(file.path)))
|
2020-08-13 03:36:20 +08:00
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
replace(/<script type="text\/babel">([\s\S]*)<\/script>/igm, (m, p) => {
|
2020-08-13 03:36:20 +08:00
|
|
|
if (p.trim().length === 0) return '<!-- No script -->'
|
|
|
|
const min = babelCore.transformSync(p, BABEL_OPTIONS).code
|
|
|
|
return '<script>\n' + min + '\n</script>'
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
replace(/ type="text\/babel"/ig, '')
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
replace(/<script th:src="@\{(.*)\}"><\/script>/ig, (m, p) => {
|
2020-08-13 03:36:20 +08:00
|
|
|
let file = p
|
|
|
|
if (file.includes('/lib/') || file.includes('/language/')) {
|
|
|
|
if (file.includes('babel')) return '<!-- No Babel -->'
|
|
|
|
if (file.includes('.development.js')) file = file.replace('.development.js', '.production.min.js')
|
2020-10-16 21:53:44 +08:00
|
|
|
return '<script th:src="@{' + file + '}"></script>'
|
2020-08-13 03:36:20 +08:00
|
|
|
} else {
|
2020-10-16 21:53:44 +08:00
|
|
|
file += '?v=' + _assetsHex(file.split('?')[0])
|
|
|
|
return '<script th:src="@{' + file + '}"></script>'
|
2020-08-13 03:36:20 +08:00
|
|
|
}
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
replace(/<style type="text\/css">([\s\S]*)<\/style>/igm, (m, p) => {
|
2020-08-13 03:36:20 +08:00
|
|
|
if (p.trim().length === 0) return '<!-- No style -->'
|
|
|
|
const min = new cleanCSS2({}).minify(p).styles
|
|
|
|
return '<style type="text/css">\n' + min + '\n</style>'
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
replace(/<link rel="stylesheet" type="text\/css" th:href="@\{(.*)\}" \/>/ig, (m, p) => {
|
2020-08-13 03:36:20 +08:00
|
|
|
let file = p
|
|
|
|
if (file.includes('/lib/')) {
|
2020-10-16 21:53:44 +08:00
|
|
|
return '<link rel="stylesheet" type="text/css" th:href="@{' + file + '}" />'
|
2020-08-13 03:36:20 +08:00
|
|
|
} else {
|
|
|
|
file += '?v=' + _assetsHex(file.split('?')[0])
|
2020-10-16 21:53:44 +08:00
|
|
|
return '<link rel="stylesheet" type="text/css" th:href="@{' + file + '}" />'
|
2020-08-13 03:36:20 +08:00
|
|
|
}
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.pipe(
|
2020-08-18 14:49:27 +08:00
|
|
|
debug({
|
|
|
|
title: 'Compiled : '
|
|
|
|
})
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
.pipe(
|
2020-10-16 21:53:44 +08:00
|
|
|
dest(OUT_ROOT)
|
2020-08-13 03:36:20 +08:00
|
|
|
)
|
|
|
|
}
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-08-13 11:41:35 +08:00
|
|
|
function maven(cb) {
|
|
|
|
const pomfile = `${__dirname}/../pom.xml`
|
|
|
|
console.log('Using pom.xml : ' + pomfile)
|
|
|
|
|
|
|
|
const mvn = require('child_process').spawnSync(
|
|
|
|
process.platform === 'win32' ? 'mvn.cmd' : 'mvn',
|
2020-08-18 14:49:27 +08:00
|
|
|
['clean', 'package', '-f', pomfile], {
|
2020-10-16 21:53:44 +08:00
|
|
|
stdio: 'inherit'
|
|
|
|
})
|
2020-08-13 11:41:35 +08:00
|
|
|
|
|
|
|
if (mvn.status !== 0) {
|
|
|
|
process.stderr.write(mvn.stderr)
|
|
|
|
process.exit(mvn.status)
|
|
|
|
}
|
|
|
|
cb()
|
|
|
|
}
|
|
|
|
|
2020-10-16 21:53:44 +08:00
|
|
|
// const RELEASE_HOME = 'D:/GitHub/for-production/rebuild-standalone/REBUILD'
|
2020-08-18 14:49:27 +08:00
|
|
|
|
2020-10-16 21:53:44 +08:00
|
|
|
// function release(cb) {
|
|
|
|
// return src('../target/rebuild/**')
|
|
|
|
// .pipe(
|
|
|
|
// filter((file) => {
|
|
|
|
// const m = /\.jsx/.test(file.path) || /\.development\./.test(file.path) || /babel\./.test(file.path) ||
|
|
|
|
// /rebel\.xml/.test(file.path)
|
|
|
|
// m && console.log('Filtered : ' + file.path)
|
|
|
|
// return !m
|
|
|
|
// })
|
|
|
|
// )
|
|
|
|
// .pipe(
|
|
|
|
// dest(RELEASE_HOME)
|
|
|
|
// )
|
|
|
|
// .on('end', () => {
|
|
|
|
// src('build/**')
|
|
|
|
// .pipe(
|
|
|
|
// dest(RELEASE_HOME)
|
|
|
|
// )
|
|
|
|
// })
|
|
|
|
// }
|
2020-08-13 01:10:08 +08:00
|
|
|
|
2020-10-16 21:53:44 +08:00
|
|
|
exports.default = series(parallel(compileJs, compileCss), compileHtml)
|
|
|
|
exports.mvn = maven
|
|
|
|
// exports.p = series(maven, parallel(compileJs, compileCss), compileHtml, release)
|