Skip to content

Instantly share code, notes, and snippets.

View NickHeiner's full-sized avatar
💭
Wubba lubba dub dub!!

Nick Heiner NickHeiner

💭
Wubba lubba dub dub!!
View GitHub Profile
@NickHeiner
NickHeiner / grunt-errors.js
Created February 19, 2015 22:00
Handling errors
// index.js
function myTask(args) {
if (somethingBadHappened()) {
throw new Error('Too many cooks will spoil the broth.');
}
}
// tasks/task.js
module.exports = function(grunt) {
// Sync version
@NickHeiner
NickHeiner / grunt-logging.js
Last active August 29, 2015 14:15
Handling logging
// index.js
function myTask(rawArgs) {
var args = fillInDefaults(rawArgs, {
log: console.log
});
}
// tasks/task.js
module.exports = function(grunt) {
grunt.registerMultiTask('my-task', function() {
@NickHeiner
NickHeiner / grunt-sample.js
Last active August 29, 2015 14:15
A better approach
// index.js
function myTask(args) {
// do work
}
// tasks/task.js
module.exports = function(grunt) {
grunt.registerMultiTask('my-task', function() {
var myTask = require('../');
var options = this.options();
@NickHeiner
NickHeiner / grunt-error.js
Created February 19, 2015 19:12
grunt error checking
grunt.registerTask('my-task', function() {
var util = require('util'),
done = this.async();
doAsyncWork().then(done).fail(function(err) {
done(util.isError(err) ? err : new Error(err));
});
});
@NickHeiner
NickHeiner / grunt-task.js
Last active August 29, 2015 14:15
grunt async
// How it is
grunt.registerTask('my-async-task', function() {
var done = this.async();
doAsyncWork().then(done).fail(done);
});
// How it should be
grunt.registerTask('my-async-task', function() {
return doAsyncWork();
});
@NickHeiner
NickHeiner / grunt-better.js
Created February 19, 2015 18:57
A better way
grunt.registerTask(‘task-a’, function() {
var result = doStuff(),
taskBFn = require('task-b');
taskBFn({
runtimeGenerated: arbitraryConfig();
}).then(function() {
doMoreStuff(result);
})
});
@NickHeiner
NickHeiner / task-pain.js
Last active August 29, 2015 14:15
Pain with grunt
grunt.registerTask(‘task-a’, function() {
var uuid = require('uuid'),
result = doStuff(),
postTaskName = 'after-task-b-' + uuid.v4();
grunt.registerTask(postTaskName, function() {
doMoreStuff(result);
});
grunt.config(postTaskName, {
@NickHeiner
NickHeiner / unit.js
Last active August 29, 2015 14:15
Running unit tests
grunt.registerTask('unit', 'Run unit tests for your js.', [
'set-async-config:angular-unit-make-tests',
'browserify:angular-module-tests',
'set-async-config:angular-unit',
'x-web-build-js:angular-module-lib',
'karma:once',
'set-async-config:angular-unit-min',
'x-web-build-js:angular-module-lib-min',
'karma:once',
]);
@NickHeiner
NickHeiner / set-async-config.js
Created February 18, 2015 22:46
bad bad bad bad
q.all(_.map(this.options(), function(configPromiseFn, configKey) {
var configPromise = configPromiseFn();
return q(configPromise).then(function(configVal) {
grunt.verbose.ok('set-async-config: Setting key "' + configKey + '" to "' + configVal + '"');
grunt.config(configKey, configVal);
});
}));
@NickHeiner
NickHeiner / grunt-config.js
Created February 18, 2015 22:44
A terrible config file
// In the grunt config object
'set-async-config': {
'build-something': {
options: {
'key.into.grunt.config': function getAsyncValue() {
return getTmpDir('-tmp-dir-prefix');
}
}
}
}