const { src, dest, series, parallel } = require('gulp') const babel = require('gulp-babel') const babelCore = require('@babel/core') const cleanCSS = require('gulp-clean-css') const cleanCSS2 = require('clean-css') const fs = require('fs') const debug = require('gulp-debug') const revHash = require('rev-hash') const replace = require('gulp-replace') const filter = require('gulp-filter') const BABEL_OPTIONS = { presets: ['@babel/preset-env', '@babel/preset-react'], plugins: ['@babel/plugin-proposal-class-properties'], minified: true } const WEB_ROOT = '../src/main/resources/web' const OUT_ROOT = '../target/classes/web' function compileJs(cb) { return src(`${WEB_ROOT}/assets/js/**/*.js`) .pipe( babel(BABEL_OPTIONS) ) .pipe( debug({ title: 'Compiled : ' }) ) .pipe( dest(`${OUT_ROOT}/assets/js`) ) } function compileCss(cb) { return src(`${WEB_ROOT}/assets/css/**/*.css`) .pipe( cleanCSS() ) .pipe( debug({ title: 'Compiled : ' }) ) .pipe( dest(`${OUT_ROOT}/assets/css`) ) } const _assetsHexCached = {} function _assetsHex(file) { let hex = _assetsHexCached[file] if (!hex) { hex = revHash(fs.readFileSync(`${WEB_ROOT}${file}`)) _assetsHexCached[file] = hex } return hex } function compileHtml(cb) { return src(`${WEB_ROOT}/**/*.html`) .pipe(filter(file => !/node_modules/.test(file.path))) .pipe( replace(/' }) ) .pipe( replace(/ type="text\/babel"/ig, '') ) .pipe( replace(/' } else { file += '?v=' + _assetsHex(file.split('?')[0]) return '' } }) ) .pipe( replace(/' }) ) .pipe( replace(//ig, (m, p) => { let file = p if (file.includes('/lib/')) { return '' } else { file += '?v=' + _assetsHex(file.split('?')[0]) return '' } }) ) .pipe( debug({ title: 'Compiled : ' }) ) .pipe( dest(OUT_ROOT) ) } 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', ['clean', 'package', '-f', pomfile], { stdio: 'inherit' }) if (mvn.status !== 0) { process.stderr.write(mvn.stderr) process.exit(mvn.status) } cb() } // const RELEASE_HOME = 'D:/GitHub/for-production/rebuild-standalone/REBUILD' // 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) // ) // }) // } exports.default = series(parallel(compileJs, compileCss), compileHtml) exports.mvn = maven // exports.p = series(maven, parallel(compileJs, compileCss), compileHtml, release)