Skip to content

Instantly share code, notes, and snippets.

@airtonix
Created March 17, 2014 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save airtonix/9601224 to your computer and use it in GitHub Desktop.
Save airtonix/9601224 to your computer and use it in GitHub Desktop.
ExpressJs Local development server that stream compiles sass, jade and coffeescript
util = require 'util'
path = require 'path'
fs = require 'fs'
require 'string.prototype.endswith'
express = require "express"
compile = require "compile-middleware"
sass = require "node-sass"
coffee = require "coffee-script"
jade = require 'jade'
port = 8000
assetMiddleware =
js: compile
src : './src/assets/'
src_ext : '.coffee'
headers:
'content-type': 'application/javascript'
filename : (request) ->
request.path.replace ".js", ""
render : (file, cb, deps) ->
fs.readFile file, 'utf8', (err, content) ->
if not err
cb null, coffee.compile(content)
cb err
css: compile
src : './src/assets/'
src_ext : '.scss'
headers:
'content-type': 'text/css'
filename : (request) ->
request.path.replace ".css", ""
render : (file, cb, deps) ->
fs.readFile file, 'utf8', (err, content) ->
if not err
cb null, sass.renderSync(content, { includePaths: [ __dirname + "/src/assets/css", ] })
cb err
html: compile
src : './src/assets/'
src_ext : '.jade'
headers:
'content-type': "text/html"
filename : (request) ->
source = request.path.replace ".html", ""
if source.endsWith '/'
source += "index"
source
render : (file, cb, deps) ->
fs.readFile file, 'utf8', (err, content) ->
if not err
cb null, jade.compile(content, {})()
cb err
app = express()
app.set 'views', __dirname + '/src/views'
app.set 'view engine', 'jade'
app.use assetMiddleware.js
app.use assetMiddleware.css
app.use assetMiddleware.html
app.get '/', (req, res) ->
res.render 'index.jade'
app.use express.static 'src/assets'
app.use express.favicon 'src/assets/img/favicon.png'
app.use express.logger 'dev'
app.listen port
util.puts 'Listening on ' + port + '...'
util.puts 'Press Ctrl + C to stop.'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment