Skip to content

Instantly share code, notes, and snippets.

@kamiyam
Created November 2, 2013 16:56
Show Gist options
  • Save kamiyam/7281030 to your computer and use it in GitHub Desktop.
Save kamiyam/7281030 to your computer and use it in GitHub Desktop.
Sails 0.9.7 default Gruntfile
###
Gruntfile
If you created your Sails app with `sails new foo --linker`,
the following files will be automatically injected (in order)
into the EJS and HTML files in your `views` and `assets` folders.
At the top part of this file, you'll find a few of the most commonly
configured options, but Sails' integration with Grunt is also fully
customizable. If you'd like to work with your assets differently
you can change this file to do anything you like!
More information on using Grunt to work with static assets:
http://gruntjs.com/configuring-tasks
###
module.exports = (grunt) ->
###
CSS files to inject in order
(uses Grunt-style wildcard/glob/splat expressions)
###
cssFilesToInject = ["linker/**/*.css"]
###
Javascript files to inject in order
(uses Grunt-style wildcard/glob/splat expressions)
###
# All of the rest of your app scripts imported here
jsFilesToInject = ["linker/js/socket.io.js", "linker/js/sails.io.js", "linker/js/app.js", "linker/**/*.js"]
###
Client-side HTML templates are injected using the sources below
The ordering of these templates shouldn't matter.
(uses Grunt-style wildcard/glob/splat expressions)
###
templateFilesToInject = ["linker/**/*.html"]
# Modify css file injection paths to use
cssFilesToInject = cssFilesToInject.map((path) ->
".tmp/public/" + path
)
# Modify js file injection paths to use
jsFilesToInject = jsFilesToInject.map((path) ->
".tmp/public/" + path
)
templateFilesToInject = templateFilesToInject.map((path) ->
"assets/" + path
)
# Get path to core grunt dependencies from Sails
depsPath = grunt.option("gdsrc") or "node_modules/sails/node_modules"
grunt.loadTasks depsPath + "/grunt-contrib-clean/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-copy/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-concat/tasks"
grunt.loadTasks depsPath + "/grunt-sails-linker/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-jst/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-watch/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-uglify/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-cssmin/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-less/tasks"
grunt.loadTasks depsPath + "/grunt-contrib-coffee/tasks"
# Project configuration.
grunt.initConfig
pkg: grunt.file.readJSON("package.json")
copy:
dev:
files: [
expand: true
cwd: "./assets"
src: ["**/*.!(coffee)"]
dest: ".tmp/public"
]
build:
files: [
expand: true
cwd: ".tmp/public"
src: ["**/*"]
dest: "www"
]
clean:
dev: [".tmp/public/**"]
build: ["www"]
jst:
dev:
# To use other sorts of templates, specify the regexp below:
# options: {
# templateSettings: {
# interpolate: /\{\{(.+?)\}\}/g
# }
# },
files:
".tmp/public/jst.js": templateFilesToInject
less:
dev:
files: [
expand: true
cwd: "assets/styles/"
src: ["*.less"]
dest: ".tmp/public/styles/"
ext: ".css"
,
expand: true
cwd: "assets/linker/styles/"
src: ["*.less"]
dest: ".tmp/public/linker/styles/"
ext: ".css"
]
coffee:
dev:
options:
bare: true
files: [
expand: true
cwd: "assets/js/"
src: ["**/*.coffee"]
dest: ".tmp/public/js/"
ext: ".js"
,
expand: true
cwd: "assets/linker/js/"
src: ["**/*.coffee"]
dest: ".tmp/public/linker/js/"
ext: ".js"
]
concat:
js:
src: jsFilesToInject
dest: ".tmp/public/concat/production.js"
css:
src: cssFilesToInject
dest: ".tmp/public/concat/production.css"
uglify:
dist:
src: [".tmp/public/concat/production.js"]
dest: ".tmp/public/min/production.js"
cssmin:
dist:
src: [".tmp/public/concat/production.css"]
dest: ".tmp/public/min/production.css"
"sails-linker":
devJs:
options:
startTag: "<!--SCRIPTS-->"
endTag: "<!--SCRIPTS END-->"
fileTmpl: "<script src=\"%s\"></script>"
appRoot: ".tmp/public"
files:
".tmp/public/**/*.html": jsFilesToInject
"views/**/*.html": jsFilesToInject
"views/**/*.ejs": jsFilesToInject
prodJs:
options:
startTag: "<!--SCRIPTS-->"
endTag: "<!--SCRIPTS END-->"
fileTmpl: "<script src=\"%s\"></script>"
appRoot: ".tmp/public"
files:
".tmp/public/**/*.html": [".tmp/public/min/production.js"]
"views/**/*.html": [".tmp/public/min/production.js"]
"views/**/*.ejs": [".tmp/public/min/production.js"]
devStyles:
options:
startTag: "<!--STYLES-->"
endTag: "<!--STYLES END-->"
fileTmpl: "<link rel=\"stylesheet\" href=\"%s\">"
appRoot: ".tmp/public"
# cssFilesToInject defined up top
files:
".tmp/public/**/*.html": cssFilesToInject
"views/**/*.html": cssFilesToInject
"views/**/*.ejs": cssFilesToInject
prodStyles:
options:
startTag: "<!--STYLES-->"
endTag: "<!--STYLES END-->"
fileTmpl: "<link rel=\"stylesheet\" href=\"%s\">"
appRoot: ".tmp/public"
files:
".tmp/public/index.html": [".tmp/public/min/production.css"]
"views/**/*.html": [".tmp/public/min/production.css"]
"views/**/*.ejs": [".tmp/public/min/production.css"]
# Bring in JST template object
devTpl:
options:
startTag: "<!--TEMPLATES-->"
endTag: "<!--TEMPLATES END-->"
fileTmpl: "<script type=\"text/javascript\" src=\"%s\"></script>"
appRoot: ".tmp/public"
files:
".tmp/public/index.html": [".tmp/public/jst.js"]
"views/**/*.html": [".tmp/public/jst.js"]
"views/**/*.ejs": [".tmp/public/jst.js"]
devJsJADE:
options:
startTag: "// SCRIPTS"
endTag: "// SCRIPTS END"
fileTmpl: "script(type=\"text/javascript\", src=\"%s\")"
appRoot: ".tmp/public"
files:
"views/**/*.jade": jsFilesToInject
prodJsJADE:
options:
startTag: "// SCRIPTS"
endTag: "// SCRIPTS END"
fileTmpl: "script(type=\"text/javascript\", src=\"%s\")"
appRoot: ".tmp/public"
files:
"views/**/*.jade": [".tmp/public/min/production.js"]
devStylesJADE:
options:
startTag: "// STYLES"
endTag: "// STYLES END"
fileTmpl: "link(rel=\"stylesheet\", href=\"%s\")"
appRoot: ".tmp/public"
files:
"views/**/*.jade": cssFilesToInject
prodStylesJADE:
options:
startTag: "// STYLES"
endTag: "// STYLES END"
fileTmpl: "link(rel=\"stylesheet\", href=\"%s\")"
appRoot: ".tmp/public"
files:
"views/**/*.jade": [".tmp/public/min/production.css"]
# Bring in JST template object
devTplJADE:
options:
startTag: "// TEMPLATES"
endTag: "// TEMPLATES END"
fileTmpl: "script(type=\"text/javascript\", src=\"%s\")"
appRoot: ".tmp/public"
files:
"views/**/*.jade": [".tmp/public/jst.js"]
watch:
api:
files: ["api/**/*"]
assets:
files: ["assets/**/*"]
tasks: ["compileAssets", "linkAssets"]
# When Sails is lifted:
grunt.registerTask "default", ["compileAssets", "linkAssets", "watch"]
grunt.registerTask "compileAssets", ["clean:dev", "jst:dev", "less:dev", "copy:dev", "coffee:dev"]
# Update link/script/template references in `assets` index.html
grunt.registerTask "linkAssets", ["sails-linker:devJs", "sails-linker:devStyles", "sails-linker:devTpl", "sails-linker:devJsJADE", "sails-linker:devStylesJADE", "sails-linker:devTplJADE"]
# Build the assets into a web accessible folder.
# (handy for phone gap apps, chrome extensions, etc.)
grunt.registerTask "build", ["compileAssets", "linkAssets", "clean:build", "copy:build"]
# When sails is lifted in production
grunt.registerTask "prod", ["clean:dev", "jst:dev", "less:dev", "copy:dev", "coffee:dev", "concat", "uglify", "cssmin", "sails-linker:prodJs", "sails-linker:prodStyles", "sails-linker:devTpl", "sails-linker:prodJsJADE", "sails-linker:prodStylesJADE", "sails-linker:devTplJADE"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment