rebuild/.production/gulpfile.js

109 lines
3.8 KiB
Java
Raw Normal View History

2018-11-17 21:15:55 +08:00
const gulp = require('gulp')
2018-11-21 16:15:30 +08:00
const gulpSequence = require('gulp-sequence')
2018-11-17 21:15:55 +08:00
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-21 02:32:01 +08:00
const babelCore = require('@babel/core')
2018-11-21 16:15:30 +08:00
const fs = require('fs')
const revHash = require('rev-hash')
2018-12-18 15:46:02 +08:00
const del = require('del')
2018-11-17 21:15:55 +08:00
2018-11-21 16:15:30 +08:00
// ES6 转码并压缩
2018-12-18 15:46:02 +08:00
gulp.task('xjs', () => {
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-21 16:15:30 +08:00
//.pipe(rename({ extname: '.min.js' }))
.pipe(gulp.dest('./build/assets/js'))
2018-11-17 21:15:55 +08:00
})
2018-11-21 16:15:30 +08:00
// CSS 压缩
2018-12-18 15:46:02 +08:00
gulp.task('xcss', () => {
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-21 16:15:30 +08:00
//.pipe(rename({ extname: '.min.css' }))
.pipe(gulp.dest('./build/assets/css'))
2018-11-17 21:15:55 +08:00
})
2018-11-21 16:15:30 +08:00
// JSP 文件内的 ES6 转码并压缩
// 去除 babel 标记并为 JS/CSS 添加版本号
const ASSETS_HEX = {}
2019-01-14 23:24:53 +08:00
const fileHex = (file) => {
let hex = ASSETS_HEX[file]
if (!!!hex) {
try {
hex = revHash(fs.readFileSync(file.replace('${baseUrl}', './build')))
} catch (err) {
hex = revHash(fs.readFileSync(file.replace('${pageContext.request.contextPath}', './build')))
}
ASSETS_HEX[file] = hex
}
return hex
}
2018-12-18 15:46:02 +08:00
gulp.task('xjsp', () => {
2018-11-21 16:15:30 +08:00
return gulp.src('../src/main/webapp/**/*.jsp')
.pipe(debug({ title: 'compress jsp file : ' }))
2018-11-21 16:36:33 +08:00
.pipe(replace(/<script type="text\/babel">([\s\S]*)<\/script>/igm, (m, p, o, s) => {
2018-11-21 16:15:30 +08:00
if (p.trim().length == 0) return '<!-- No scripts -->'
let es5 = ''
try {
es5 = babelCore.transformSync(p, {
2018-12-31 22:37:08 +08:00
"presets": ["@babel/env", "@babel/react"], minified: true
2018-11-21 16:15:30 +08:00
}).code
} catch (err) {
2018-11-21 16:36:33 +08:00
throw new Error('Babel transform :\n' + err)
2018-11-21 16:15:30 +08:00
}
return '<script>' + es5 + '</script>'
}))
.pipe(replace(/ type="text\/babel"/ig, '')) // remove type="text/babel"
.pipe(replace(/<script src="(.*)"><\/script>/ig, (m, p, o, s) => {
let file = p
if (file.includes('/lib/')) {
if (file.includes('babel')) return '<!-- No Babel -->'
if (file.includes('.development.js')) file = file.replace('.development.js', '.production.min.js')
return '<script src="' + file + '"></script>'
}
file = file.replace('.jsx', '.js').split('?')[0]
2019-01-14 23:24:53 +08:00
file += '?v=' + fileHex(file)
2018-11-21 16:15:30 +08:00
console.log(p + ' >> ' + file)
return '<script src="' + file + '"></script>'
}))
.pipe(replace(/<link rel="stylesheet" type="text\/css" href="(.*)">/ig, (m, p, o, s) => {
let file = p
if (file.includes('/lib/')) return '<link rel="stylesheet" type="text/css" href="' + file + '">'
file = file.split('?')[0]
2019-01-14 23:24:53 +08:00
file += '?v=' + fileHex(file)
2018-11-21 16:15:30 +08:00
console.log(p + ' >> ' + file)
return '<link rel="stylesheet" type="text/css" href="' + file + '">'
}))
.pipe(gulp.dest('./build'))
2018-11-17 21:15:55 +08:00
})
2019-01-05 00:22:35 +08:00
gulp.task('clear', () => {
2018-12-18 15:46:02 +08:00
del(['./_temp', './build'])
})
2019-01-05 00:22:35 +08:00
gulp.task('cp', () => {
gulp.src('./build/**')
.pipe(gulp.dest('/data/rebuild47070/webapps/ROOT'))
})
2019-09-20 14:18:45 +08:00
gulp.task('cp2', () => {
gulp.src('./build/**')
.pipe(gulp.dest('../target/rebuild'))
})
2019-01-05 00:22:35 +08:00
2018-12-18 15:46:02 +08:00
gulp.task('default', gulpSequence(['xjs', 'xcss'], 'xjsp'))
2019-01-05 00:22:35 +08:00
gulp.task('all', gulpSequence(['xjs', 'xcss'], 'xjsp', 'cp'))
2019-09-20 14:18:45 +08:00
gulp.task('all2', gulpSequence(['xjs', 'xcss'], 'xjsp', 'cp2'))
2019-01-05 00:22:35 +08:00