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.
180 lines
4.2 KiB
JavaScript
180 lines
4.2 KiB
JavaScript
var gulp = require('gulp');
|
|
|
|
/* CoffeeScript compile deps */
|
|
var path = require('path');
|
|
var gutil = require('gulp-util');
|
|
var concat = require('gulp-concat');
|
|
var rename = require('gulp-rename');
|
|
var coffee = require('gulp-coffee');
|
|
var sass = require("gulp-sass");
|
|
var cache = require('gulp-cached');
|
|
var remember = require('gulp-remember');
|
|
var plumber = require('gulp-plumber');
|
|
var livereload = require('gulp-livereload');
|
|
var nodemon = require("gulp-nodemon");
|
|
var jade = require("gulp-jade");
|
|
var net = require("net");
|
|
var spy = require("through2-spy");
|
|
var webpack = require("gulp-webpack");
|
|
var named = require("vinyl-named");
|
|
|
|
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 = {
|
|
coffee: [
|
|
{
|
|
name: "util",
|
|
source: ["templateUtil.coffee"],
|
|
base: ".",
|
|
destination: "."
|
|
}
|
|
],
|
|
jade: [
|
|
{
|
|
name: "views",
|
|
source: ["./views/client/**/*.jade"],
|
|
base: "./views/client",
|
|
destination: "./public/views"
|
|
}, {
|
|
name: "elements",
|
|
source: ["./src/elements/**/*.jade"],
|
|
base: "./src/elements",
|
|
destination: "./public/elements"
|
|
}
|
|
],
|
|
sass: [
|
|
{
|
|
name: "elements",
|
|
source: ["./src/elements/**/*.scss"],
|
|
base: "./src/elements",
|
|
destination: "./public/elements"
|
|
}
|
|
]
|
|
}
|
|
|
|
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 "coffee":
|
|
processor = coffee({bare: true});
|
|
break;
|
|
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);
|
|
}
|
|
}
|
|
|
|
gulp.task('webpack', function(){
|
|
return gulp.src("./src/coffee/index.coffee")
|
|
.pipe(webpack({
|
|
watch: true,
|
|
module: {
|
|
loaders: [{ test: /\.coffee$/, loader: "coffee-loader" }]
|
|
},
|
|
resolve: { extensions: ["", ".web.coffee", ".web.js", ".coffee", ".js"] }
|
|
}))
|
|
.pipe(rename("bundle.js"))
|
|
.pipe(gulp.dest("./public/js"));
|
|
});
|
|
|
|
gulp.task("webpack-elements", function() {
|
|
return gulp.src(["./src/elements/**/*.coffee"], {base: "./src/elements"})
|
|
.pipe(plumber())
|
|
.pipe(named())
|
|
.pipe(webpack({
|
|
watch: true,
|
|
module: {
|
|
loaders: [{ test: /\.coffee$/, loader: "coffee-loader" }]
|
|
},
|
|
resolve: { extensions: ["", ".web.coffee", ".web.js", ".coffee", ".js"] }
|
|
}))
|
|
.pipe(gulp.dest("./public/elements"));
|
|
});
|
|
|
|
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(3000);
|
|
}, 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('watch', function () {
|
|
global.isWatching = true;
|
|
livereload.listen();
|
|
gulp.watch(['./**/*.css', 'views/**/*.jade', '!views/client/**/*.jade', 'package.json']).on('change', livereload.changed);
|
|
gulp.watch(['public/views/**/*.html', 'public/elements/**/*']).on('change', function() { livereload.changed("*"); }); // We need to explicitly reload everything here; Polymer doesn't do partial reloading
|
|
|
|
for (i in watchTasks) {
|
|
task = watchTasks[i];
|
|
gulp.watch(task[0].source, [task[1]]);
|
|
}
|
|
|
|
nodemon({script: "./bin/www.coffee", ext: "coffee", delay: 500}).on("start", checkServerUp);
|
|
});
|
|
|
|
startupTasks.push("webpack", "webpack-elements", "watch");
|
|
|
|
gulp.task('default', startupTasks);
|