1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/gulpfile.js

196 lines
5.9 KiB
JavaScript
Raw Normal View History

2017-06-03 04:31:51 +08:00
var ts = require('gulp-typescript');
var gulp = require('gulp');
2017-06-03 05:21:05 +08:00
var zip = require('gulp-zip');
var fs = require('fs');
2017-06-03 04:31:51 +08:00
var runSequence = require('run-sequence');
2017-07-12 04:10:36 +08:00
var jsonModify = require('gulp-json-modify');
var exec = require('child_process').exec;
2017-06-03 04:31:51 +08:00
2018-03-30 08:30:23 +08:00
var translationFolder = "translate";
var tsBackendProject = ts.createProject('tsconfig.json');
2017-07-12 04:10:36 +08:00
gulp.task('build-backend', function () {
return gulp.src([
"common/**/*.ts",
"backend/**/*.ts"], {base: "."})
2017-10-20 00:08:07 +08:00
.pipe(tsBackendProject())
2017-07-12 04:10:36 +08:00
.js
.pipe(gulp.dest("./release"))
2017-06-03 04:31:51 +08:00
});
2018-03-30 08:30:23 +08:00
var createFrontendTask = function (type, script) {
gulp.task(type, function (cb) {
exec(script, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
2017-07-12 04:10:36 +08:00
});
};
gulp.task('build-frontend', function (done) {
var languages = getLanguages().filter(function (l) {
return l !== "en";
});
var tasks = [];
2018-05-04 06:23:48 +08:00
createFrontendTask('build-frontend-release default',
2018-05-23 08:27:07 +08:00
"ng build --aot --prod --output-path=./release/dist --no-progress --i18n-locale=en" +
2018-05-04 06:23:48 +08:00
" --i18n-format xlf --i18n-file frontend/" + translationFolder + "/messages.en.xlf" +
2018-05-23 08:27:07 +08:00
" --i18n-missing-translation warning");
tasks.push('build-frontend-release default');
2018-03-30 08:30:23 +08:00
for (var i = 0; i < languages.length; i++) {
2018-05-04 06:23:48 +08:00
createFrontendTask('build-frontend-release ' + languages[i],
2018-05-23 08:27:07 +08:00
"ng build --aot --prod --output-path=./release/dist/" + languages[i] +
" --no-progress --i18n-locale=" + languages[i] +
2018-05-04 06:23:48 +08:00
" --i18n-format xlf --i18n-file frontend/" + translationFolder + "/messages." + languages[i] + ".xlf" +
2018-05-23 08:27:07 +08:00
" --i18n-missing-translation warning");
tasks.push('build-frontend-release ' + languages[i]);
}
tasks.push(function () {
done();
});
runSequence.apply(this, tasks);
2017-07-12 04:10:36 +08:00
});
gulp.task('copy-static', function () {
return gulp.src([
"README.md",
"LICENSE"], {base: "."})
.pipe(gulp.dest('./release'));
});
gulp.task('copy-package', function () {
return gulp.src([
"package.json"], {base: "."})
.pipe(jsonModify({
key: 'devDependencies',
value: {}
}))
.pipe(jsonModify({
key: 'scripts',
value: {"start": "node ./backend/index.js"}
}))
.pipe(gulp.dest('./release'));
});
2017-06-03 05:21:05 +08:00
gulp.task('zip-release', function () {
2017-07-12 04:23:07 +08:00
return gulp.src(['release/**/*'], {base: "./release"})
2017-07-12 04:10:36 +08:00
.pipe(zip('pigallery2.zip'))
.pipe(gulp.dest('.'));
2017-06-03 05:21:05 +08:00
});
2017-06-03 04:31:51 +08:00
gulp.task('build-release', function (done) {
2017-07-12 04:10:36 +08:00
runSequence('build-frontend', 'build-backend', 'copy-static', 'copy-package', 'zip-release', function () {
done();
});
});
2018-03-30 08:30:23 +08:00
var getLanguages = function () {
if (!fs.existsSync("./frontend/" + translationFolder)) {
return [];
}
var dirCont = fs.readdirSync("./frontend/" + translationFolder);
var files = dirCont.filter(function (elm) {
return elm.match(/.*\.[a-zA-Z]+\.(xlf)/ig);
});
return files.map(function (f) {
return f.split(".")[1]
});
};
2018-01-07 22:11:05 +08:00
var simpleBuild = function (isProd) {
return function (done) {
var languages = getLanguages().filter(function (l) {
return l !== "en";
});
2018-01-07 22:11:05 +08:00
var tasks = [];
2018-03-31 05:59:43 +08:00
var cmd = "ng build --aot ";
2018-01-07 22:11:05 +08:00
if (isProd) {
2018-05-23 08:27:07 +08:00
cmd += " --prod "
2018-01-07 22:11:05 +08:00
}
2018-05-23 08:27:07 +08:00
createFrontendTask('build-frontend default', cmd + "--output-path=./dist --no-progress --no-progress --i18n-locale en" +
" --i18n-format=xlf --i18n-file=frontend/" + translationFolder + "/messages.en.xlf" + " --i18n-missing-translation warning");
tasks.push('build-frontend default');
2018-03-30 08:30:23 +08:00
for (var i = 0; i < languages.length; i++) {
2018-05-23 08:27:07 +08:00
createFrontendTask('build-frontend ' + languages[i], cmd + "--output-path=./dist/" + languages[i] + " --no-progress --i18n-locale " + languages[i] +
" --i18n-format=xlf --i18n-file=frontend/" + translationFolder + "/messages." + languages[i] + ".xlf" + " --i18n-missing-translation warning");
tasks.push('build-frontend ' + languages[i]);
2018-01-07 22:11:05 +08:00
}
tasks.push(function () {
done();
});
2018-01-07 22:11:05 +08:00
runSequence.apply(this, tasks);
};
};
2018-03-30 08:30:23 +08:00
gulp.task("extract-locale", function (cb) {
console.log("creating source translation file: locale.source.xlf");
2018-05-23 08:27:07 +08:00
exec('ng xi18n -of ./../locale.source.xlf -f xlf --i18n-locale en', function (err, stdout, stderr) {
2018-03-30 08:30:23 +08:00
console.log(stdout);
console.log(stderr);
if (err) {
return cb(err);
}
exec('ngx-extractor -i frontend/**/*.ts -f xlf -o locale.source.xlf', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
});
});
var translate = function (list, cb) {
var localsStr = '"[\\"' + list.join('\\",\\"') + '\\"]"';
console.log(localsStr);
exec('xlf-google-translate --source-lang="en" --source-file="./locale.source.xlf" --destination-folder="./frontend/"' +
translationFolder + ' --destination-languages=' + localsStr, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
};
gulp.task("update-translation-only", function (cb) {
translate(getLanguages(), cb)
});
gulp.task("update-translation", function (done) {
runSequence('extract-locale', 'update-translation-only', function () {
done();
});
});
gulp.task("add-translation-only", function (cb) {
var languages = getLanguages();
var lng = null;
for (var i = 0; i < process.argv.length - 1; i++) {
if (process.argv[i] === "add-translation") {
lng = process.argv[i + 1].replace("--", "");
}
}
if (lng == null) {
console.error("Error: set language with '--' e.g: npm run add-translation -- --en");
return cb();
}
if (languages.indexOf(lng) !== -1) {
console.error("Error: language already exists, can't add. These language(s) already exist(s): " + languages);
return cb();
}
translate([lng], cb)
});
gulp.task("add-translation", function (done) {
runSequence('extract-locale', 'add-translation-only', function () {
done();
});
});
2018-01-07 22:11:05 +08:00
gulp.task('build-dev', simpleBuild(false));
gulp.task('build-prod', simpleBuild(true));