A micro-framework for BIG Gulp projects that could benefit from some abstraction and organization.
Getting going with BIG Gulp is really simple. Start off by installing the gulp and rentpost/big-gulp npm modules.
cd /path/to/your/gulp/app
npm install gulp
npm install rentpost/big-gulpNext, be sure to add something similar to the following to your package.json file inside your app directory.
Note that within the autoload property, you can define directories for autoloading. A value of true for a "namespace" like "tasks" will load all task files within that directory. Optionally, you can selectively load in modules by defining an object collection with a value of true where the "key" is the name of the module/file.
{
"_BigGulp": {
"config": {
"absolutePath": "/path/to/your/gulp/app",
"logPath": "/path/to/your/gulp/app/logs",
"minLogLevel": "debug"
},
"autoload": {
"tasks": true,
"node_modules": {
"gulp": true,
"gulp-sourcemaps": true,
"gulp-sass": true,
"gulp-uglify": true,
}
},
"watch": {
"/path/to/your/gulp/app/src/js": [ "lint", "test", "js" ],
"/path/to/your/gulp/app/src/scss": [ "sass" ]
}
}After setting up your config, add the following to your gulpfile.js to initialize and load BIG Gulp.
var BigGulp = require("big-gulp")(module),
app = BigGulp.load();
app.watch(); //optionally start watchingOnce you've done this, you can now start playing. If you autoloaded a "tasks" namespace, the tasks within this directory get overloaded and pass the app for accessing your various modules.
Below is an example of a task.
Note the use of the app.config. Additional config properties can be added to the config in your package.json. If you choose to do so, please use _underscored property keys to avoid any future conflicts.
/**
* LINT's the necessary assets
*/
module.exports = {
/**
* Run the task
* @param {object} app
*/
run: function(app) {
return app.modules.gulp.src(app.config.absolutePath + 'src/*.js')
.pipe(app.modules.gulpJshint())
.pipe(app.modules.gulpJshint.reporter('default'));
}
};- gulp for providing some amazing build tools.
- jwerle for a nice autoloader for node modules.
- lodash becasue it's awesome!
- indexzero for a nice tool for locating, reading and parsing package.json.
- ianstormtaylor for making it easy to camelCase random strings.
- flatiron for their fantastic work on Winston, a kick-ass logging lib.
- momentjs because it's amazing.
- sindresorhus for helping make the CLI purdy.
The MIT License (MIT)
Copyright © 2014 - RentPost, Inc.