Files
Paradise/html/nttc/gulpfile.js
2018-11-15 11:03:16 -08:00

106 lines
2.7 KiB
JavaScript

/* Dependencies */
// Regular node dependencies
var child_process = require("child_process");
var fs = require("fs");
var path = require("path");
// Main compilers
var browserify = require("browserify");
var gulp = require("gulp");
// Extras
var del = require("del");
var concat = require("gulp-concat");
var flatten = require("gulp-flatten");
var rename = require("gulp-rename");
var buffer = require("vinyl-buffer");
var source = require("vinyl-source-stream");
/* Configuration */
const watch_targets = [
"./src/index.js",
"./src/css/*",
"./src/js/*",
"./src/html/**/*"
]
const output = {
"css": "bundle.css",
"dest": "./dist/",
"js": "bundle.js"
};
/* Clean out the dist directory to get rid of any old build artifacts. */
gulp.task("clean", function () {
del(output.dest + "*");
});
/* This uses browserify to compress every single require() into a single javascript file. */
gulp.task("browserify", ["clean"], function () {
var bundleStream = browserify("./src/index.js").bundle();
bundleStream
.pipe(source("index.js"))
.pipe(rename("bundle.js"))
.pipe(buffer())
.pipe(gulp.dest(output.dest))
});
/* CSS concatenation and output. */
gulp.task("css", ["clean"], function () {
gulp.src("./src/css/*.css")
.pipe(concat(output.css))
.pipe(buffer())
.pipe(gulp.dest(output.dest))
});
/* Basically just copy-paste the html files into the dest, but flatten the directory structure. */
gulp.task("etc", ["clean"], function () {
gulp.src("./src/html/**/*.html")
.pipe(flatten())
.pipe(buffer())
.pipe(gulp.dest(output.dest));
gulp.src("./src/img/*")
.pipe(buffer())
.pipe(gulp.dest(output.dest));
});
// This runs all of the other defined tasks on "gulp"
gulp.task("default", ["css", "etc", "browserify"])
// Autoreload
gulp.task("reload", ["default"], function() {
child_process.exec("reload.bat", function (err, stdout) {
if (err)
throw err;
var byond_cache = path.join(stdout.trim(), "BYOND", "cache");
var files = fs.readdirSync(byond_cache);
for (let file of files) {
let filepath = path.join(byond_cache, file);
let stats = fs.statSync(filepath)
if (file.startsWith("tmp") && stats.isDirectory()) {
var tmpFiles = fs.readdirSync(filepath);
if (tmpFiles.includes("bundle.js")) {
setTimeout(function () {transfer_files(filepath)}, 500);
}
}
}
});
});
function transfer_files(target) {
console.log("transfer_files")
let filesToTransfer = fs.readdirSync(path.join(".", "dist"));
for (let file of filesToTransfer) {
console.log(file, path.join(target, file))
let filepath = path.join(".", "dist", file);
fs.createReadStream(filepath).pipe(fs.createWriteStream(path.join(target, file)))
}
}
gulp.task("watch", function () {
gulp.watch(watch_targets, ["reload"]);
});