Create a gist now

Instantly share code, notes, and snippets.

@dweldon /Cakefile
Last active Dec 11, 2015

What would you like to do?
This is a Cakefile for automatically compiling jade templates to html files in an arbitrarily deep directory tree. It was intended for use with meteor, however you can use it with any framework by changing the start task and the DIR. NOTE: this requires that chokidar and jade be installed via npm. NOTE: this assumes that the only html files unde…
fs = require 'fs'
path = require 'path'
chokidar = require 'chokidar'
{spawn} = require 'child_process'
DIR = path.join __dirname, 'client'
isType = (file, type) ->
path.extname(file) is '.' + type
findFiles = (dir, type, files = {}) ->
for filename in fs.readdirSync dir
file = path.join dir, filename
stats = fs.statSync file
if stats.isDirectory()
findFiles file, type, files
else if isType filename, type
files[file] = true
Object.keys files
runJade = (files, cb = ->) ->
stdio = ['ignore', 'ignore', process.stderr]
(spawn 'jade', files, {stdio}).on 'exit', cb
jadeDir = (dir, cb = ->) ->
runJade findFiles(dir, 'jade'), cb
watchDir = (dir) ->
watcher = dir
watcher.on 'add', (file) ->
runJade [file] if isType file, 'jade'
watcher.on 'change', (file) ->
runJade [file] if isType file, 'jade'
watcher.on 'unlink', (file) ->
if isType file, 'jade'
htmlFile = file[0...-4] + 'html'
if fs.existsSync htmlFile
fs.unlinkSync htmlFile
task 'start', 'start the server', ->
jadeDir DIR, ->
watchDir DIR
spawn 'meteor', [], stdio: 'inherit'
task 'jade', 'compile jade files', ->
jadeDir DIR
task 'clean', 'remove html files', ->
for file in findFiles DIR, 'html'
fs.unlinkSync file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment