2018-11-17 21:15:55 +08:00
|
|
|
const gulp = require('gulp')
|
|
|
|
const babel = require('gulp-babel')
|
|
|
|
const uglify = require('gulp-uglify')
|
2018-11-21 02:32:01 +08:00
|
|
|
const cleanCss = require('gulp-clean-css')
|
2018-11-17 21:15:55 +08:00
|
|
|
const rename = require('gulp-rename')
|
|
|
|
const replace = require('gulp-replace')
|
|
|
|
const debug = require('gulp-debug')
|
2018-11-20 00:04:37 +08:00
|
|
|
const cleanhtml = require('gulp-cleanhtml')
|
2018-11-21 02:32:01 +08:00
|
|
|
const babelCore = require('@babel/core')
|
|
|
|
const rev = require('gulp-rev')
|
|
|
|
const revReplace = require('gulp-rev-replace')
|
2018-11-17 21:15:55 +08:00
|
|
|
|
2018-11-21 02:32:01 +08:00
|
|
|
// ES6 > ES5 & compress js
|
|
|
|
gulp.task('cjs', () => {
|
2018-11-17 21:15:55 +08:00
|
|
|
return gulp.src('../src/main/webapp/assets/js/**/*.js?(x)')
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(gulp.dest('./_temp/es6'))
|
2018-11-17 21:15:55 +08:00
|
|
|
.pipe(babel())
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(gulp.dest('./_temp/es5'))
|
|
|
|
.pipe(uglify())
|
|
|
|
.pipe(debug({ title: 'compress js file : ' }))
|
2018-11-17 21:15:55 +08:00
|
|
|
//.pipe(rename({ extname: '.min.js' }))
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(gulp.dest('./build/assets/js'))
|
2018-11-17 21:15:55 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
// compress css
|
2018-11-21 02:32:01 +08:00
|
|
|
gulp.task('ccss', () => {
|
2018-11-17 21:15:55 +08:00
|
|
|
return gulp.src('../src/main/webapp/assets/css/**/*.css')
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(cleanCss())
|
|
|
|
.pipe(debug({ title: 'compress css file : ' }))
|
2018-11-17 21:15:55 +08:00
|
|
|
//.pipe(rename({ extname: '.min.css' }))
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(gulp.dest('./build/assets/css'))
|
2018-11-17 21:15:55 +08:00
|
|
|
})
|
|
|
|
|
2018-11-21 02:32:01 +08:00
|
|
|
// replace compressed js/css file in jsp
|
|
|
|
// compress and replace inline js (babel)
|
|
|
|
gulp.task('cjsp', () => {
|
2018-11-20 00:04:37 +08:00
|
|
|
return gulp.src('../src/main/webapp/**/*.jsp')
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(debug({ title: 'compress jsp file : ' }))
|
2018-11-20 00:04:37 +08:00
|
|
|
.pipe(replace(/<script type="text\/babel">([\s]+[\d\D]*)<\/script>/igm, (m, p, o, s) => {
|
2018-11-21 02:32:01 +08:00
|
|
|
p = p.trim()
|
|
|
|
if (p.length == 0) return '<script><!--NoCode--></script>'
|
|
|
|
let es5 = ''
|
|
|
|
try {
|
|
|
|
let r = babelCore.transformSync(p, { "presets": ["@babel/env", "@babel/react"], minified: true })
|
|
|
|
es5 = r.code
|
|
|
|
} catch (err){
|
|
|
|
console.log('Babel transform : ' + err)
|
|
|
|
}
|
2018-11-20 00:04:37 +08:00
|
|
|
return '<script>' + es5 + '</script>'
|
|
|
|
}))
|
|
|
|
.pipe(replace(/ type="text\/babel"/ig, '')) // remove type="text/babel"
|
2018-11-21 02:32:01 +08:00
|
|
|
.pipe(replace(/\.jsx/g, '.js')) // replace suffix .jsx > .js
|
2018-11-20 00:04:37 +08:00
|
|
|
.pipe(replace('<script src="${baseUrl}/assets/lib/react/babel.js"></script>', '')) // remove babel lib
|
|
|
|
// .pipe(cleanhtml())
|
2018-11-21 02:32:01 +08:00
|
|
|
// .pipe(rev())
|
|
|
|
// .pipe(revReplace())
|
|
|
|
.pipe(gulp.dest('./build'))
|
2018-11-17 21:15:55 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
2018-11-21 02:32:01 +08:00
|
|
|
gulp.task('default', [ 'cjs', 'ccss', 'cjsp' ])
|