Skip to content

Instantly share code, notes, and snippets.

@alvaromuir
Last active December 23, 2015 16:09
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 alvaromuir/6660413 to your computer and use it in GitHub Desktop.
Save alvaromuir/6660413 to your computer and use it in GitHub Desktop.
Ember & Jade Grunt configuration. Renders *.jade files to *.hbs from app/template and adds them to Ember.TEMPLATE
"use strict"
# # Globbing
# for performance reasons we're only matching one level down:
# 'test/spec/{,*/}*.js'
# use this if you want to recursively match all subfolders:
# 'test/spec/**/*.js'
module.exports = (grunt) ->
# show elapsed time at the end
require("time-grunt") grunt
# load all grunt tasks
require("load-grunt-tasks") grunt
# configurable paths
yeomanConfig =
app: "app"
dist: "dist"
grunt.initConfig
yeoman: yeomanConfig
watch:
coffee:
files: ["<%= yeoman.app %>/scripts/{,*/}*.coffee"]
tasks: ["coffee:dist"]
coffeeTest:
files: ["test/spec/{,*/}*.coffee"]
tasks: ["coffee:test"]
jadeHTML:
files: ["<%= yeoman.app %>/*.jade"]
tasks: ["jade:html"]
jadeHBS:
files: ["<%= yeoman.app %>/templates/{,*/}*.jade"]
tasks: ["jade:templates", "emberTemplates"]
compass:
files: ["<%= yeoman.app %>/styles/{,*/}*.{scss,sass}"]
tasks: ["compass:server", "autoprefixer"]
styles:
files: ["<%= yeoman.app %>/styles/{,*/}*.css"]
tasks: ["copy:styles", "autoprefixer"]
templates:
files: "<%= yeoman.app %>/templates/**/*.hbs"
tasks: ["emberTemplates"]
livereload:
options:
livereload: "<%= connect.options.livereload %>"
files: ["<%= yeoman.app %>/*.html", ".tmp/styles/{,*/}*.css", "{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js", "<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}"]
connect:
options:
port: 9000
livereload: 35729
# change this to '0.0.0.0' to access the server from outside
hostname: "localhost"
livereload:
options:
open: true
base: [".tmp", yeomanConfig.app]
test:
options:
base: [".tmp", "test", yeomanConfig.app]
dist:
options:
open: true
base: yeomanConfig.dist
clean:
dist:
files: [
dot: true
src: [".tmp", "<%= yeoman.dist %>/*", "!<%= yeoman.dist %>/.git*"]
]
server: ".tmp"
jshint:
options:
jshintrc: ".jshintrc"
all: ["Gruntfile.js", "<%= yeoman.app %>/scripts/{,*/}*.js", "!<%= yeoman.app %>/scripts/vendor/*", "test/spec/{,*/}*.js"]
mocha:
all:
options:
run: true
urls: ["http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html"]
emberTemplates:
compile:
options:
templateName: (sourceFile) ->
sourceFile.replace /app\/templates\//, ""
amd: true
files:
"<%= yeoman.app %>/scripts/templates.js": ["<%= yeoman.app %>/templates/**/*.hbs"]
jade:
html:
options:
client: false
pretty: true
files:
"<%= yeoman.app %>/": ["<%= yeoman.app %>/*.jade"]
templates:
options:
client: false
pretty: true
extension: ".hbs"
files:
"<%= yeoman.app %>/templates": ["<%= yeoman.app %>/templates/*.jade"]
coffee:
dist:
files: [
expand: true
cwd: "<%= yeoman.app %>/scripts"
src: "{,*/}*.coffee"
dest: ".tmp/scripts"
ext: ".js"
]
test:
files: [
expand: true
cwd: "test/spec"
src: "{,*/}*.coffee"
dest: ".tmp/spec"
ext: ".js"
]
compass:
options:
sassDir: "<%= yeoman.app %>/styles"
cssDir: ".tmp/styles"
generatedImagesDir: ".tmp/images/generated"
imagesDir: "<%= yeoman.app %>/images"
javascriptsDir: "<%= yeoman.app %>/scripts"
fontsDir: "<%= yeoman.app %>/styles/fonts"
importPath: "<%= yeoman.app %>/bower_components"
httpImagesPath: "/images"
httpGeneratedImagesPath: "/images/generated"
httpFontsPath: "/styles/fonts"
relativeAssets: false
dist:
options:
generatedImagesDir: "<%= yeoman.dist %>/images/generated"
server:
options:
debugInfo: true
autoprefixer:
options:
browsers: ["last 1 version"]
dist:
files: [
expand: true
cwd: ".tmp/styles/"
src: "{,*/}*.css"
dest: ".tmp/styles/"
]
# not used since Uglify task does concat,
# but still available if needed
#concat: {
# dist: {}
# },
requirejs:
dist:
# Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js
options:
# `name` and `out` is set by grunt-usemin
baseUrl: yeomanConfig.app + "/scripts"
optimize: "none"
# TODO: Figure out how to make sourcemaps work with grunt-usemin
# https://github.com/yeoman/grunt-usemin/issues/30
#generateSourceMaps: true,
# required to support SourceMaps
# http://requirejs.org/docs/errors.html#sourcemapcomments
preserveLicenseComments: false
useStrict: true
wrap: true
#uglify2: {} // https://github.com/mishoo/UglifyJS2
rev:
dist:
files:
src: ["<%= yeoman.dist %>/scripts/{,*/}*.js", "<%= yeoman.dist %>/styles/{,*/}*.css", "<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}", "<%= yeoman.dist %>/styles/fonts/{,*/}*.*"]
useminPrepare:
options:
dest: "<%= yeoman.dist %>"
html: "<%= yeoman.app %>/index.html"
usemin:
options:
dirs: ["<%= yeoman.dist %>"]
html: ["<%= yeoman.dist %>/{,*/}*.html"]
css: ["<%= yeoman.dist %>/styles/{,*/}*.css"]
imagemin:
dist:
files: [
expand: true
cwd: "<%= yeoman.app %>/images"
src: "{,*/}*.{png,jpg,jpeg}"
dest: "<%= yeoman.dist %>/images"
]
svgmin:
dist:
files: [
expand: true
cwd: "<%= yeoman.app %>/images"
src: "{,*/}*.svg"
dest: "<%= yeoman.dist %>/images"
]
cssmin: {}
# This task is pre-configured if you do not wish to use Usemin
# blocks for your CSS. By default, the Usemin block from your
# `index.html` will take care of minification, e.g.
#
# <!-- build:css({.tmp,app}) styles/main.css -->
#
# dist: {
# files: {
# '<%= yeoman.dist %>/styles/main.css': [
# '.tmp/styles/{,*/}*.css',
# '<%= yeoman.app %>/styles/{,*/}*.css'
# ]
# }
# }
htmlmin:
dist:
options: {}
#removeCommentsFromCDATA: true,
# // https://github.com/yeoman/grunt-usemin/issues/44
# //collapseWhitespace: true,
# collapseBooleanAttributes: true,
# removeAttributeQuotes: true,
# removeRedundantAttributes: true,
# useShortDoctype: true,
# removeEmptyAttributes: true,
# removeOptionalTags: true
files: [
expand: true
cwd: "<%= yeoman.app %>"
src: "*.html"
dest: "<%= yeoman.dist %>"
]
# Put files not handled in other tasks here
copy:
dist:
files: [
expand: true
dot: true
cwd: "<%= yeoman.app %>"
dest: "<%= yeoman.dist %>"
src: ["*.{ico,png,txt}", ".htaccess", "images/{,*/}*.{webp,gif}", "styles/fonts/{,*/}*.*", "bower_components/sass-bootstrap/fonts/*.*"]
]
styles:
expand: true
dot: true
cwd: "<%= yeoman.app %>/styles"
dest: ".tmp/styles/"
src: "{,*/}*.css"
modernizr:
devFile: "<%= yeoman.app %>/bower_components/modernizr/modernizr.js"
outputFile: "<%= yeoman.dist %>/bower_components/modernizr/modernizr.js"
files: ["<%= yeoman.dist %>/scripts/{,*/}*.js", "<%= yeoman.dist %>/styles/{,*/}*.css", "!<%= yeoman.dist %>/scripts/vendor/*"]
uglify: true
concurrent:
server: ["jade", "compass", "coffee:dist", "emberTemplates", "copy:styles"]
test: ["coffee", "copy:styles"]
dist: ["jade", "coffee", "compass", "emberTemplates", "copy:styles", "imagemin", "svgmin", "htmlmin"]
bower:
options:
exclude: ["modernizr"]
all:
rjsConfig: "<%= yeoman.app %>/scripts/main.js"
grunt.registerTask "server", (target) ->
return grunt.task.run(["build", "connect:dist:keepalive"]) if target is "dist"
grunt.task.run ["clean:server", "concurrent:server", "autoprefixer", "connect:livereload", "watch"]
grunt.registerTask "test", ["clean:server", "concurrent:test", "autoprefixer", "connect:test", "mocha"]
grunt.registerTask "build", ["clean:dist", "useminPrepare", "concurrent:dist", "autoprefixer", "requirejs", "concat", "cssmin", "uglify", "modernizr", "copy:dist", "rev", "usemin"]
grunt.registerTask "default", ["jshint", "test", "build"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment