Skip to content

Instantly share code, notes, and snippets.

@Illizian
Created August 30, 2014 15:23
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 Illizian/8dc73c9f485eb5d56d8d to your computer and use it in GitHub Desktop.
Save Illizian/8dc73c9f485eb5d56d8d to your computer and use it in GitHub Desktop.
alexscotton.com
var rewriteRulesSnippet = require("grunt-connect-rewrite/lib/utils").rewriteRequest;
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
},
build: {
files: {
'dist/js/main.min.js': ['src/js/main.js', '.tmp/js/coffee.js'],
'dist/js/highlight.min.js': ['src/js/highlight.pack.js'],
}
}
},
jshint: {
files: ['gruntfile.js', 'src/js/*.js', '!src/js/highlight.pack.js'],
options: {
// options here to override JSHint defaults
globals: {
jQuery: true,
console: true,
module: true,
document: true
}
}
},
less: {
build: {
options: {
yuicompress: true
},
files: {
'dist/css/main.min.css': [ 'src/css/main.less',
'src/css/style-config.less' ]
}
}
},
coffee: {
build: {
compile: {
files: {
// 'path/to/result.js': 'path/to/source.coffee', // 1:1 compile
'.tmp/js/coffee.js': ['src/js/*.coffee', 'src/js/**/*.coffee']
}
}
}
},
pages: {
options: {
pageSrc: 'src/views/pages'
},
posts: {
src: 'src/views/posts',
dest: 'dist',
layout: 'src/views/layouts/post.jade',
url: 'post/:title'
}
},
uncss: {
dist: {
// src: ['dist/post/*.html', 'dist/*.html'],
// dest: '/dist/css/main.min.css',
files: {
'css/main.min.css' : ['dist/*.html'],
'/../css/main.min.css' : ['dist/post/*.html'],
},
options: {
report: 'min' // optional: include to report savings
}
}
},
clean: {
dev: ['dev'],
build: ['dist'],
pages: ['dist/*.html'],
posts: ['dist/posts/*.html'],
images: ['dist/images']
},
tinypng: {
options: {
apiKey: "PGas7nDE0n3nkHCseID8P9qSpUYBuhIc",
summarize: true,
showProgress: true,
},
compress: {
expand: true,
src: ['*.png'],
cwd: 'src/images',
dest: 'dist/images',
ext: '.png'
}
},
copy: {
main: {
files: [
{expand: true, cwd: 'src', src: ['.htaccess', 'favicon.ico', 'robots.txt'], dest: 'dist/' }
]
},
devJs: {
files: [
{expand: true, cwd: 'src/js', src: ['*.js', '**/*.js'], dest: 'dist/js/'},
{src: '.tmp/js/coffee.js', dest: 'dist/js/'},
]
},
devImages: {
files: [
{expand: true, cwd: 'src/images', src: ['*.*'], dest: 'dist/images/'},
]
},
buildImages: {
files: [
{expand: true, cwd: 'src/images', src: ['*.*', '!*.png'], dest: 'dist/images/'},
]
}
},
'sails-linker': {
defaultOptions: {
options: {
startTag: '<!--SCRIPTS-->',
endTag: '<!--SCRIPTS END-->',
fileTmpl: '<script src="%s"></script>',
relative: true,
appRoot: 'dist/'
},
files: {
'src/views/partials/snippets.html': ['dist/js/**/*.js', 'dist/js/*.js']
},
},
},
karma: {
options: {
configFile: 'karma.conf.js',
runnerPort: 9999,
browsers: ['PhantomJS']
},
continuous: {
singleRun: true,
browsers: ['PhantomJS']
},
dev: {
reporters: 'dots'
}
},
simplemocha: {
options: {
globals: ['should'],
timeout: 10000,
ignoreLeaks: false,
ui: 'bdd',
reporter: 'spec'
},
all: {
src: ['test/buildSpec.js']
}
},
watch: {
options: {
livereload: true,
port: 9002
},
css: {
files: ['src/css/less/*.less', 'src/css/*.less'],
tasks: ['less', 'uncss'],
},
js: {
files: ['src/js/**/*.js', 'src/js/*.js', 'test/*.js'],
tasks: ['copy:devJs', 'sails-linker', 'clean:pages', 'clean:posts', 'pages'],
},
coffee: {
files: ['src/**/*.coffee', 'src/*.coffee'],
tasks: ['coffee:compile', 'copy:devJs', 'sails-linker', 'clean:pages', 'clean:posts', 'pages'],
},
pages: {
files: ['src/**/**/*.jade', 'src/**/*.jade', 'src/*.jade', 'src/views/pages/*.html', 'src/pages/*.ejs', 'src/pages/*.eco'],
tasks: ['clean:pages', 'clean:posts', 'pages', 'uncss'],
},
posts: {
files: ['src/**/**/*.jade', 'src/**/*.jade', 'src/*.jade', 'src/views/**/*.md', 'src/views/posts/*.mdown', 'src/posts/*.markdown'],
tasks: ['clean:pages', 'clean:posts', 'pages', 'uncss'],
},
},
open : {
dev : {
path: 'http://127.0.0.1:9000'
}
},
connect: {
options: {
port: 9000,
hostname: "127.0.0.1"
},
rules: [{
from: '(^((?!css|html|js|jpg|png|fonts|\/$).)*$)',
to: "$1.html"
}],
dev: {
options: {
base: "./dist",
middleware: function(connect, options) {
return [rewriteRulesSnippet, connect["static"](require("path").resolve("./dist"))];
}
}
},
}
});
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
grunt.registerTask('default', [
'clean:build', // Clean dist directory
'jshint', // JS Lint in src directory
'less:build', // Compile LESS to dist
'coffee:build', // Compile coffee in src/js into .tmp/js/coffee.js
'uglify:build', // Minify JS from src/js & .tmp/js/coffee.js into dist/js
'sails-linker', // Link JS files in /dist/js to snippets.html
'tinypng:compress',// Use tinypng to compress any pngs in /src/images/ and store relative in /dist/images/
'copy:main', // Copy .htaccess and robots.txts etc to /dist
'copy:buildImages',// Copy image assets to /dist/images
'pages', // Build Pages
'uncss', // Remove unused CSS rules
]);
grunt.registerTask('dev', [
'clean:build', // Clean dist directory
'less:build', // Compile LESS to dist
'coffee:build', // Compile coffee in src/js into src/js/coffee.js
'copy:main', // Copy .htaccess and robots.txts etc to /dist
'copy:devImages', // Copy image assets to /dist/images
'copy:devJs', // Copy JS assets to /dist/js
'sails-linker', // Link JS files in /dist/js to snippets.html
'pages', // Build Pages
'uncss', // Remove unused CSS rules
'configureRewriteRules',
'connect:dev',
'open',
'watch'
]);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment