Skip to content

Instantly share code, notes, and snippets.

@DekusDenial
Created June 16, 2013 04:17
Show Gist options
  • Save DekusDenial/5790740 to your computer and use it in GitHub Desktop.
Save DekusDenial/5790740 to your computer and use it in GitHub Desktop.
More comprehensive Gruntfile
module.exports = (grunt) ->
grunt.initConfig
appDir: "./app"
srcDir: "<%= appDir %>/src"
contentDir: "<%= appDir %>/content"
templateDir: "<%= appDir %>/templates"
vendorDir: "<%= appDir %>/vendor"
cssDir: "<%= appDir %>/stylesheets"
testDir: "./test"
buildDir: "./tmp/build"
outputDir: "./public"
coffee:
options:
bare: true
all:
files: [
expand: true,
src: ["<%= srcDir %>/**/*.coffee"]
dest: "<%= buildDir %>"
ext: ".js"
]
changed:
files: [
expand: true
src: "<%= grunt.regarde.changed %>"
dest: "<%= buildDir %>"
ext: ".js"
]
jade:
options:
client: true
compileDebug: false
namespace: "APPLICATION_TEMPLATES"
processName: (path) ->
path
.replace(/^.*\btemplates\//, "")
.replace(/\..*$/, "")
all:
files: [
expand: true
src: ["<%= templateDir %>/**/*.jade"]
dest: "<%= buildDir %>"
ext: ".js"
]
changed:
files: [
expand: true
src: "<%= grunt.regarde.changed %>"
dest: "<%= buildDir %>"
ext: ".js"
]
concat:
js:
src: [ # Order matters, at some point we should use requireJS or something to fix that
"<%= vendorDir %>/**/*.js",
"<%= buildDir %>/<%= templateDir %>/**/*.js",
"<%= buildDir %>/<%= srcDir %>/*.js",
"<%= buildDir %>/<%= srcDir %>/modules/**/*.js",
"<%= buildDir %>/<%= srcDir %>/directives/**/*.js",
"<%= buildDir %>/<%= srcDir %>/services/**/*.js",
"<%= buildDir %>/<%= srcDir %>/filters/**/*.js",
"<%= buildDir %>/<%= srcDir %>/controllers/**/*.js",
]
dest: "<%= outputDir %>/js/app.js"
less:
options:
paths: "<%= cssDir %>"
all:
files: [
src: "<%= cssDir %>/app.less"
dest: "<%= outputDir %>/css/app.css"
]
# Copy static files
copy:
html:
files: [
expand: true
cwd: "<%= contentDir %>/html"
src: ["**/*.html"]
dest: "<%= outputDir %>"
]
images:
files: [
expand: true
cwd: "<%= contentDir %>/images"
src: ["**/*"]
dest: "<%= outputDir %>/images"
]
regarde:
coffee:
files: "<%= srcDir %>/**/*.coffee"
tasks: ["coffee:changed", "concat:js"]
templates:
files: "<%= srcDir %>/**/*.jade"
tasks: ["jade:changed", "concat:js"]
vendor:
files: "<%= vendorDir %>/**/*.js"
tasks: ["concat:js"]
less:
files: "<%= cssDir %>/**/*.less"
tasks: ["spawn_less"]
html:
files: "<%= contentDir %>/html/**/*.html"
tasks: ["copy:html"]
images:
files: "<%= contentDir %>/images/**/*"
tasks: ["copy:images"]
connect:
server:
options:
hostname: "0.0.0.0"
port: 9292
base: "<%= outputDir %>"
keepalive: true
# Clean up artifacts
clean:
build: "<%= buildDir %>"
output: "<%= outputDir %>"
# Execute server script
exec:
server:
cmd: "./server.js"
karma:
unit:
configFile: "<%= testDir %>/unit_conf.js"
e2e:
configFile: "<%= testDir %>/e2e_conf.js"
# The contrib-less task has an outstanding bug that will kill a running grunt
# process (like a watch process) when it fails.
grunt.registerTask 'spawn_less', 'Run Less in a subprocess', () ->
done = this.async()
grunt.util.spawn grunt: true, args: ['less'], (err) ->
if err
grunt.log.writeln(">> Error compiling LESS file!")
done()
grunt.registerTask "js", ["coffee:all", "jade:all", "concat:js"]
grunt.registerTask "build", ["clean", "js", "less", "copy"]
grunt.registerTask "server", ["exec:server"]
grunt.registerTask "unit", ["build", "karma:unit"]
grunt.registerTask "e2e", ["build", "karma:e2e"]
grunt.registerTask "ci", ["build", "karma"]
grunt.loadNpmTasks "grunt-contrib-coffee"
grunt.loadNpmTasks "grunt-contrib-jade"
grunt.loadNpmTasks "grunt-contrib-concat"
grunt.loadNpmTasks "grunt-contrib-less"
grunt.loadNpmTasks "grunt-contrib-copy"
grunt.loadNpmTasks "grunt-regarde"
grunt.loadNpmTasks "grunt-contrib-connect"
grunt.loadNpmTasks "grunt-contrib-clean"
grunt.loadNpmTasks "grunt-exec"
grunt.loadNpmTasks "grunt-karma"
{
"name": "rcr-frontend",
"version": "0.1.0",
"dependencies": {
"grunt": "latest",
"grunt-contrib-coffee": "latest",
"grunt-contrib-jade": "latest",
"grunt-contrib-less": "latest",
"grunt-contrib-copy": "latest",
"grunt-contrib-connect": "latest",
"grunt-contrib-concat": "latest",
"grunt-regarde": "latest",
"grunt-notify": "latest",
"grunt-contrib-clean": "latest",
"grunt-karma": "latest",
"grunt-exec": "latest"
}
}
#!/usr/bin/env node
var spawn = require("child_process").spawn,
watcher = spawn("grunt", ["regarde", "--force"]),
server = spawn("grunt", ["build", "connect:server"]);
watcher.stdout.on("data", function(data) {
var importantOutput = data.toString().split("\r?\n").filter(function(str) {
return />>|Done|Warning|Running/.test(str);
});
process.stdout.write(importantOutput.join("\n"));
// process.stdout.write(data);
});
server.stdout.on("data", function(data) {
process.stdout.write(data);
});
watcher.on("exit", function(code, signal) {
server.kill();
process.exit();
});
server.on("exit", function(code, signal) {
watcher.kill();
process.exit();
});
process.on("exit", function() {
watcher.kill();
server.kill();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment