You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.1 KiB
JavaScript
147 lines
3.1 KiB
JavaScript
var gulp = require('gulp');
|
|
|
|
/* CoffeeScript compile deps */
|
|
var path = require('path');
|
|
var rename = require('gulp-rename');
|
|
var livereload = require('gulp-livereload');
|
|
var webpack = require("gulp-webpack");
|
|
var sass = require("gulp-sass");
|
|
var gutil = require('gulp-util');
|
|
var cache = require('gulp-cached');
|
|
var remember = require('gulp-remember');
|
|
var plumber = require('gulp-plumber');
|
|
var nodemon = require("gulp-nodemon");
|
|
var jade = require("gulp-jade");
|
|
var net = require("net");
|
|
var spy = require("through2-spy");
|
|
|
|
|
|
function namedLog(name) {
|
|
return function gutilLog(log) {
|
|
gc = gutil.colors;
|
|
|
|
items = ["[- " + gc.magenta(name) + " -]"];
|
|
|
|
for(i in arguments) {
|
|
items.push(arguments[i]);
|
|
}
|
|
|
|
gutil.log.apply(null, items);
|
|
}
|
|
}
|
|
|
|
tasks = {
|
|
jade: [
|
|
{
|
|
name: "test",
|
|
source: ["./test/test.jade"],
|
|
base: "./test/",
|
|
destination: "./test/"
|
|
}
|
|
],
|
|
sass: [
|
|
{
|
|
name: "test",
|
|
source: ["./test/style.scss"],
|
|
base: "./test/",
|
|
destination: "./test/"
|
|
}
|
|
]
|
|
}
|
|
|
|
function concatName(type, name) {
|
|
return type + "-" + name;
|
|
}
|
|
|
|
for (var type in tasks) {
|
|
var subTasks = tasks[type];
|
|
|
|
for (var i in subTasks) {
|
|
var subTask = subTasks[i];
|
|
|
|
(function(type, subTask) {
|
|
var taskName = concatName(type, subTask.name);
|
|
|
|
gulp.task(taskName, function() {
|
|
var processor;
|
|
|
|
switch(type) {
|
|
case "jade":
|
|
processor = jade(/*{locals: require("./templateUtil")}*/);
|
|
break;
|
|
case "sass":
|
|
processor = sass();
|
|
break;
|
|
}
|
|
|
|
return gulp.src(subTask.source, {base: subTask.base})
|
|
.pipe(plumber())
|
|
.pipe(cache(taskName))
|
|
.pipe(processor.on('error', gutil.log))
|
|
.pipe(spy.obj(namedLog(taskName)))
|
|
.pipe(remember(taskName))
|
|
.pipe(gulp.dest(subTask.destination));
|
|
});
|
|
})(type, subTask);
|
|
}
|
|
}
|
|
|
|
function checkServerUp(){
|
|
setTimeout(function(){
|
|
var sock = new net.Socket();
|
|
sock.setTimeout(50);
|
|
sock.on("connect", function(){
|
|
console.log("Triggering page reload...");
|
|
livereload.changed("*");
|
|
sock.destroy();
|
|
})
|
|
.on("timeout", checkServerUp)
|
|
.on("error", checkServerUp)
|
|
.connect(5555);
|
|
}, 70);
|
|
}
|
|
|
|
var startupTasks = [];
|
|
var watchTasks = [];
|
|
|
|
for (var type in tasks) {
|
|
var subTasks = tasks[type];
|
|
|
|
for (var i in subTasks) {
|
|
var subTask = subTasks[i];
|
|
var taskName = concatName(type, subTask.name);
|
|
startupTasks.push(taskName);
|
|
watchTasks.push([subTask, taskName]);
|
|
}
|
|
}
|
|
|
|
gulp.task('webpack', function(){
|
|
return gulp.src("./test/test.js")
|
|
.pipe(webpack({
|
|
watch: true,
|
|
module: {
|
|
loaders: [{ test: /\.coffee$/, loader: "coffee-loader" }]
|
|
},
|
|
resolve: { extensions: ["", ".web.coffee", ".web.js", ".coffee", ".js"] }
|
|
}))
|
|
.pipe(rename("test-bundle.js"))
|
|
.pipe(gulp.dest("./test/"));
|
|
});
|
|
|
|
gulp.task('watch', function () {
|
|
global.isWatching = true;
|
|
livereload.listen();
|
|
gulp.watch(['./test/*.js', './test/*.html', './test/*.css']).on('change', livereload.changed);
|
|
|
|
for (i in watchTasks) {
|
|
task = watchTasks[i];
|
|
gulp.watch(task[0].source, [task[1]]);
|
|
}
|
|
|
|
nodemon({script: "./bin/www", ext: "js", delay: 500}).on("start", checkServerUp);
|
|
});
|
|
|
|
startupTasks.push("webpack", "watch");
|
|
|
|
gulp.task('default', startupTasks);
|