mirror of
https://github.com/getrebuild/rebuild.git
synced 2024-09-20 15:35:55 +08:00
use gulp v4
This commit is contained in:
parent
3301048ed6
commit
e615730c27
|
@ -1,139 +1,133 @@
|
|||
/* eslint-disable indent */
|
||||
/* global process, __dirname */
|
||||
const gulp = require('gulp')
|
||||
const gulpSequence = require('gulp-sequence')
|
||||
const { src, dest, series, parallel } = require('gulp')
|
||||
const babel = require('gulp-babel')
|
||||
const uglify = require('gulp-uglify')
|
||||
const cleancss = require('gulp-clean-css')
|
||||
const replace = require('gulp-replace')
|
||||
const debug = require('gulp-debug')
|
||||
const filter = require('gulp-filter')
|
||||
const BabelCore = require('@babel/core')
|
||||
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 CleanCSS2 = require('clean-css')
|
||||
const replace = require('gulp-replace')
|
||||
const filter = require('gulp-filter')
|
||||
|
||||
// JS 压缩 ES6>ES5
|
||||
gulp.task('xjs', () => {
|
||||
return gulp.src('../target/rebuild/assets/js/**/*.js?(x)')
|
||||
.pipe(gulp.dest('./temp/es6'))
|
||||
.pipe(babel({
|
||||
presets: ['@babel/env', '@babel/react']
|
||||
}))
|
||||
.pipe(gulp.dest('./temp/es5'))
|
||||
.pipe(uglify())
|
||||
.pipe(debug({ title: 'Compressed js(x) file : ' }))
|
||||
.pipe(gulp.dest('./build/assets/js'))
|
||||
})
|
||||
|
||||
// CSS 压缩
|
||||
gulp.task('xcss', () => {
|
||||
return gulp.src('../target/rebuild/assets/css/**/*.css')
|
||||
.pipe(cleancss())
|
||||
.pipe(debug({ title: 'Compressed css file : ' }))
|
||||
.pipe(gulp.dest('./build/assets/css'))
|
||||
})
|
||||
|
||||
// 去除 babel 标记并为 JS/CSS 文件添加版本号
|
||||
// JSP 文件内的 JS/CSS 压缩
|
||||
const __ASSETS_HEX = {}
|
||||
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
|
||||
const BABEL_OPTIONS = {
|
||||
presets: ['@babel/preset-env', '@babel/preset-react'],
|
||||
plugins: ['@babel/plugin-proposal-class-properties'],
|
||||
minified: true
|
||||
}
|
||||
|
||||
gulp.task('xjsp', () => {
|
||||
return gulp.src('../target/rebuild/**/*.jsp')
|
||||
.pipe(debug({ title: 'Compressing jsp file : ' }))
|
||||
.pipe(replace(/<script type="text\/babel">([\s\S]*)<\/script>/igm, (m, p) => {
|
||||
if (p.trim().length === 0) return '<!-- No script -->'
|
||||
const min = BabelCore.transformSync(p, {
|
||||
presets: ['@babel/env', '@babel/react'],
|
||||
minified: true
|
||||
}).code
|
||||
return '<script>' + min + '</script>'
|
||||
}))
|
||||
.pipe(replace(/ type="text\/babel"/ig, '')) // remove type="text/babel"
|
||||
.pipe(replace(/<script src="(.*)"><\/script>/ig, (m, p) => {
|
||||
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>'
|
||||
} else if (file.includes('/language/')) {
|
||||
console.warn('Ignore file : ' + file)
|
||||
return '<script src="' + file + '"></script>'
|
||||
} else {
|
||||
file = file.replace('.jsx', '.js').split('?')[0]
|
||||
console.log(p + ' >> ' + file)
|
||||
file += '?v=' + __fileHex(file)
|
||||
return '<script src="' + file + '"></script>'
|
||||
}
|
||||
}))
|
||||
.pipe(replace(/<style type="text\/css">([\s\S]*)<\/style>/igm, (m, p) => {
|
||||
if (p.trim().length === 0) return '<!-- No style -->'
|
||||
const min = new CleanCSS2({}).minify(p).styles
|
||||
return '<style type="text/css">' + min + '</style>'
|
||||
}))
|
||||
.pipe(replace(/<link rel="stylesheet" type="text\/css" href="(.*)">/ig, (m, p) => {
|
||||
let file = p
|
||||
if (file.includes('/lib/')) return '<link rel="stylesheet" type="text/css" href="' + file + '">'
|
||||
file = file.split('?')[0]
|
||||
file += '?v=' + __fileHex(file)
|
||||
console.log(p + ' >> ' + file)
|
||||
return '<link rel="stylesheet" type="text/css" href="' + file + '">'
|
||||
}))
|
||||
.pipe(gulp.dest('./build'))
|
||||
})
|
||||
function compileJs(cb) {
|
||||
return src('../target/rebuild/assets/js/**/*.js?(x)')
|
||||
.pipe(
|
||||
babel(BABEL_OPTIONS)
|
||||
)
|
||||
.pipe(
|
||||
debug({ title: 'Compiled : ' })
|
||||
)
|
||||
.pipe(
|
||||
dest('build/assets/js')
|
||||
)
|
||||
}
|
||||
|
||||
// MVN 编译&打包
|
||||
gulp.task('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' })
|
||||
function compileCss(cb) {
|
||||
return src('../target/rebuild/assets/css/**/*.css')
|
||||
.pipe(
|
||||
cleanCSS()
|
||||
)
|
||||
.pipe(
|
||||
debug({ title: 'Compiled : ' })
|
||||
)
|
||||
.pipe(
|
||||
dest('build/assets/css')
|
||||
)
|
||||
}
|
||||
|
||||
if (mvn.status !== 0) {
|
||||
process.stderr.write(mvn.stderr)
|
||||
process.exit(mvn.status)
|
||||
const _assetsHexCached = {}
|
||||
function _assetsHex(file) {
|
||||
let hex = _assetsHexCached[file]
|
||||
if (!hex) {
|
||||
try {
|
||||
hex = revHash(fs.readFileSync(file.replace('${baseUrl}', 'build')))
|
||||
} catch (err) {
|
||||
hex = revHash(fs.readFileSync(file.replace('${pageContext.request.contextPath}', 'build')))
|
||||
}
|
||||
typeof cb === 'function' && cb()
|
||||
})
|
||||
_assetsHexCached[file] = hex
|
||||
}
|
||||
return hex
|
||||
}
|
||||
|
||||
// Group tasks
|
||||
function compileJsp(cb) {
|
||||
return src('../target/rebuild/**/*.jsp')
|
||||
.pipe(
|
||||
replace(/<script type="text\/babel">([\s\S]*)<\/script>/igm, (match, p) => {
|
||||
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(
|
||||
replace(/<script src="(.*)"><\/script>/ig, (m, p) => {
|
||||
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')
|
||||
return '<script src="' + file + '"></script>'
|
||||
} else {
|
||||
file += '?v=' + _assetsHex(file.replace('.jsx', '.js').split('?')[0])
|
||||
return '<script src="' + file + '"></script>'
|
||||
}
|
||||
})
|
||||
)
|
||||
.pipe(
|
||||
replace(/<style type="text\/css">([\s\S]*)<\/style>/igm, (match, p) => {
|
||||
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(
|
||||
replace(/<link rel="stylesheet" type="text\/css" href="(.*)">/ig, (match, p) => {
|
||||
let file = p
|
||||
if (file.includes('/lib/')) {
|
||||
return '<link rel="stylesheet" type="text/css" href="' + file + '">'
|
||||
} else {
|
||||
file += '?v=' + _assetsHex(file.split('?')[0])
|
||||
return '<link rel="stylesheet" type="text/css" href="' + file + '">'
|
||||
}
|
||||
})
|
||||
)
|
||||
.pipe(
|
||||
debug({ title: 'Compiled : ' })
|
||||
)
|
||||
.pipe(
|
||||
dest('build')
|
||||
)
|
||||
}
|
||||
|
||||
const DEPLOY_HOME = '/data/rebuild47070/webapps/ROOT'
|
||||
gulp.task('cp2server', () => {
|
||||
gulp.src('./build/**')
|
||||
.pipe(gulp.dest(DEPLOY_HOME))
|
||||
})
|
||||
const RELEASE_HOME = 'D:/MAVEN2017/rebuild/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)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
const PACKAGE_HOME = 'D:/MAVEN2017/rebuild/for-production/rebuild-standalone/REBUILD'
|
||||
gulp.task('cp2release', () => {
|
||||
gulp.src('../target/rebuild/**')
|
||||
.pipe(filter((file) => {
|
||||
const pro = /\.jsx/.test(file.path) || /\.development\./.test(file.path) || /babel\./.test(file.path)
|
||||
|| /rebel\.xml/.test(file.path)
|
||||
pro && console.log('Filtered file : ' + file.path)
|
||||
return !pro
|
||||
}))
|
||||
.pipe(gulp.dest(PACKAGE_HOME))
|
||||
.on('end', () => {
|
||||
gulp.src('./build/**')
|
||||
.pipe(gulp.dest(PACKAGE_HOME))
|
||||
})
|
||||
})
|
||||
|
||||
gulp.task('default', gulpSequence(['xjs', 'xcss'], 'xjsp'))
|
||||
gulp.task('d', gulpSequence(['xjs', 'xcss'], 'xjsp', 'cp2server'))
|
||||
gulp.task('p', gulpSequence('maven', ['xjs', 'xcss'], 'xjsp', 'cp2release'))
|
||||
exports.default = series(parallel(compileJs, compileCss), compileJsp)
|
||||
exports.p = series(parallel(compileJs, compileCss), compileJsp, release)
|
4677
.deploy/package-lock.json
generated
Normal file
4677
.deploy/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,31 +1,27 @@
|
|||
{
|
||||
"name": "rebuild-babel",
|
||||
"name": "rebuild-compiler",
|
||||
"version": "1.0.0",
|
||||
"description": "rebuild js/jsx/css compiler",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "rebuild",
|
||||
"license": "GPL-3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/getrebuild/rebuild.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "babel js/es6 -d js/es5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/cli": "^7.6.4",
|
||||
"@babel/core": "^7.6.4",
|
||||
"@babel/plugin-proposal-class-properties": "^7.5.5",
|
||||
"@babel/preset-env": "^7.6.3",
|
||||
"@babel/preset-react": "^7.6.3",
|
||||
"clean-css": "^4.2.1",
|
||||
"gulp": "^3.9.1",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.11.1",
|
||||
"@babel/preset-env": "^7.11.0",
|
||||
"@babel/preset-react": "^7.10.4",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-babel": "^8.0.0",
|
||||
"gulp-clean-css": "^3.10.0",
|
||||
"gulp-clean-css": "^4.3.0",
|
||||
"gulp-debug": "^4.0.0",
|
||||
"gulp-filter": "^6.0.0",
|
||||
"gulp-replace": "^1.0.0",
|
||||
"gulp-sequence": "^1.0.0",
|
||||
"gulp-uglify": "^3.0.1",
|
||||
"rev-hash": "^2.0.0"
|
||||
"rev-hash": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
3268
.deploy/yarn.lock
3268
.deploy/yarn.lock
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue