This commit is contained in:
syuilo 2017-01-12 18:53:52 +09:00
parent 05e563db8f
commit 66dbfaae9b
2 changed files with 63 additions and 58 deletions

View File

@ -25,6 +25,8 @@ import pug = require('gulp-pug');
import git = require('git-last-commit'); import git = require('git-last-commit');
import * as rimraf from 'rimraf'; import * as rimraf from 'rimraf';
import * as escapeHtml from 'escape-html'; import * as escapeHtml from 'escape-html';
import prominence = require('prominence');
import promiseify = require('promiseify');
const env = process.env.NODE_ENV; const env = process.env.NODE_ENV;
const isProduction = env === 'production'; const isProduction = env === 'production';
@ -175,75 +177,77 @@ gulp.task('build:client', [
} }
}); });
gulp.task('build:client:scripts', done => { gulp.task('build:client:scripts', async (done) => {
gutil.log('スクリプトを構築します...'); gutil.log('スクリプトを構築します...');
// Get commit info // Get commit info
git.getLastCommit((err, commit) => { const commit = await prominence(git).getLastCommit();
glob('./src/web/app/*/script.js', (err, files) => {
const tasks = files.map(entry => {
let bundle =
browserify({
entries: [entry]
})
.transform(ls)
.transform(aliasify, aliasifyConfig)
// スペースでインデントされてないとエラーが出る // Get all app scripts
.transform(transformify((source, file) => { const files = await promiseify(glob)('./src/web/app/*/script.js');
if (file.substr(-4) !== '.tag') return source;
return source.replace(/\t/g, ' ');
}))
.transform(transformify((source, file) => { // Compile for each scripts
return source const tasks = files.map(entry => {
.replace(/VERSION/g, `'${commit ? commit.hash : 'null'}'`) let bundle =
.replace(/\$theme\-color\-foreground/g, '#fff') browserify({
.replace(/\$theme\-color/g, config.themeColor) entries: [entry]
.replace(/CONFIG\.theme-color/g, `'${config.themeColor}'`) })
.replace(/CONFIG\.themeColor/g, `'${config.themeColor}'`) .transform(ls)
.replace(/CONFIG\.api\.url/g, `'${config.scheme}://api.${config.host}'`) .transform(aliasify, aliasifyConfig)
.replace(/CONFIG\.urls\.about/g, `'${config.scheme}://about.${config.host}'`)
.replace(/CONFIG\.urls\.dev/g, `'${config.scheme}://dev.${config.host}'`)
.replace(/CONFIG\.url/g, `'${config.url}'`)
.replace(/CONFIG\.host/g, `'${config.host}'`)
.replace(/CONFIG\.recaptcha\.siteKey/g, `'${config.recaptcha.siteKey}'`)
;
}))
.transform(riotify, { // スペースでインデントされてないとエラーが出る
type: 'livescript', .transform(transformify((source, file) => {
expr: false, if (file.substr(-4) !== '.tag') return source;
compact: true, return source.replace(/\t/g, ' ');
parserOptions: { }))
style: {
compress: true,
rawDefine: config
}
}
})
.bundle()
.pipe(source(entry.replace('./src/web/app/', './').replace('.ls', '.js')));
if (isProduction) { .transform(transformify((source, file) => {
bundle = bundle return source
.pipe(buffer()) .replace(/VERSION/g, `'${commit ? commit.hash : 'null'}'`)
// ↓ https://github.com/mishoo/UglifyJS2/issues/448 .replace(/\$theme\-color\-foreground/g, '#fff')
.pipe(babel({ .replace(/\$theme\-color/g, config.themeColor)
presets: ['es2015'] .replace(/CONFIG\.theme-color/g, `'${config.themeColor}'`)
})) .replace(/CONFIG\.themeColor/g, `'${config.themeColor}'`)
.pipe(uglify({ .replace(/CONFIG\.api\.url/g, `'${config.scheme}://api.${config.host}'`)
compress: true .replace(/CONFIG\.urls\.about/g, `'${config.scheme}://about.${config.host}'`)
})); .replace(/CONFIG\.urls\.dev/g, `'${config.scheme}://dev.${config.host}'`)
.replace(/CONFIG\.url/g, `'${config.url}'`)
.replace(/CONFIG\.host/g, `'${config.host}'`)
.replace(/CONFIG\.recaptcha\.siteKey/g, `'${config.recaptcha.siteKey}'`)
;
}))
.transform(riotify, {
type: 'livescript',
expr: false,
compact: true,
parserOptions: {
style: {
compress: true,
rawDefine: config
}
} }
})
.bundle()
.pipe(source(entry.replace('./src/web/app/', './').replace('.ls', '.js')));
return bundle if (isProduction) {
.pipe(gulp.dest('./built/web/resources/')); bundle = bundle
}); .pipe(buffer())
// ↓ https://github.com/mishoo/UglifyJS2/issues/448
.pipe(babel({
presets: ['es2015']
}))
.pipe(uglify({
compress: true
}));
}
es.merge(tasks).on('end', done); return bundle
}); .pipe(gulp.dest('./built/web/resources/'));
}); });
es.merge(tasks).on('end', done);
}); });
gulp.task('build:client:styles', () => { gulp.task('build:client:styles', () => {

View File

@ -109,6 +109,7 @@
"nyaize": "0.0.2", "nyaize": "0.0.2",
"page": "1.7.1", "page": "1.7.1",
"prominence": "0.2.0", "prominence": "0.2.0",
"promiseify": "0.2.0",
"pug": "2.0.0-beta6", "pug": "2.0.0-beta6",
"ratelimiter": "2.1.3", "ratelimiter": "2.1.3",
"recaptcha-promise": "0.1.2", "recaptcha-promise": "0.1.2",