{"_id":"hum","_rev":"47-387be3ae7c665e037b6abba2a0715a28","name":"hum","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","dist-tags":{"latest":"2.1.7"},"versions":{"0.0.0":{"name":"hum","version":"0.0.0","description":"","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":"","license":"MIT","readme":"ERROR: No README data found!","_id":"hum@0.0.0","dist":{"shasum":"f8e62714068b8cc9af0fe78040e409313ae66b67","tarball":"https://registry.npmjs.org/hum/-/hum-0.0.0.tgz","integrity":"sha512-jeNajRA0ZStdinMjw9/KiwPs57jaJBNcBayGErQh+VVpLoK8f9hYZHhOjQWZtLcIQxlLNxkac0QQcwRo6XZsXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICkayeigKuUbA8si8UnADaCb/zWnAUtmJ0wqP7vUstAmAiBZU6h/SBYKeOMFqcuYUdD1RJEgOG4PV3/LSjfsBVy1cA=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.2.1":{"name":"hum","version":"1.2.1","description":"Hum, hum could run global grunt tasks which searched from specified paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run global grunt tasks which searched from specified paths.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>'\n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n- options.path `path` the path(s) to search tasks from\n- options.cwd `path` `options.cwd` will be added to every target of each task configuration.\n\n### .npmTasks(moduleName)\n\nSimilar as `grunt.loadNpmTasks()`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig()`\n\n### .options(options)\n\nSets options for grunt cli.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.2.1","dist":{"shasum":"1e4eb06d74b6a00a99fb4b39b7d0860dba62fdd4","tarball":"https://registry.npmjs.org/hum/-/hum-1.2.1.tgz","integrity":"sha512-1Tei0b3LKIvfJWNT94byCo6F4mCLoAmC0SQOZdx+6w5mXV45ktS5l5QaZ8KecBMhKj/hcVRc+WsvDT6tSF0K6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDG7W4QsG3Mhzve0qc5pj46+lTtsGHklDlIvNDl9a/j9AiEAm3NutKEqlrIxcdnzFlCBobNmO/AspspQkCvsarL9U5M="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.2.2":{"name":"hum","version":"1.2.2","description":"Hum, hum could run global grunt tasks which searched from specified paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run global grunt tasks which searched from specified paths.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>'\n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n- options.path `path` the path(s) to search tasks from\n- options.cwd `path` `options.cwd` will be added to every target of each task configuration.\n\n### .npmTasks(moduleName)\n\nSimilar as `grunt.loadNpmTasks()`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig()`\n\n### .options(options)\n\nSets options for grunt cli.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.2.2","dist":{"shasum":"82d69d60bf9c6374829c181ed6f726001914546f","tarball":"https://registry.npmjs.org/hum/-/hum-1.2.2.tgz","integrity":"sha512-eHJhSljjmYTqm7z+xCsmv7Kcu1aujko+mI9lv+oQEKBWM7KOcq95VsA7Kg6MhF6rwtRXG0X2/FJYuJaIHy5FNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBb1lcTHeGoH9SOxaC8Ik0s4yFrbLZ7jzEQeoxHTsuTaAiAVsQPS3My+VSoKAaLzYYF8J5FlK60Ni2FTCh14qs76mg=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.2.3":{"name":"hum","version":"1.2.3","description":"Hum, hum could run global grunt tasks which searched from specified paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run global grunt tasks which searched from specified paths.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>'\n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n- options.path `path` the path(s) to search tasks from\n- options.cwd `path` `options.cwd` will be added to every target of each task configuration.\n\n### .npmTasks(moduleName)\n\nSimilar as `grunt.loadNpmTasks()`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig()`\n\n### .options(options)\n\nSets options for grunt cli.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.2.3","dist":{"shasum":"67c6b43c2e1ad5c2f0ed04c8d669c3a88c856657","tarball":"https://registry.npmjs.org/hum/-/hum-1.2.3.tgz","integrity":"sha512-u7xM91TNMhRcsDSqAiQzIhJAlVOI+ALJx+9pU6Nduw24nyvc/RKpKYDdZFnvcOG5uao0iO4MqthYHUZrCBBNwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC00egwK8+uVFqFaDqXqz/4R5pogkEWLbVkLh6mQfxbaAIhAJ0ny5hOwEirHLJdCrsr9q7obhsBeIrzNEB9HoJqxpSU"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.2.4":{"name":"hum","version":"1.2.4","description":"Hum, hum could run global grunt tasks which searched from specified paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run global grunt tasks which searched from specified paths.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>'\n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n- options.path `path` the path(s) to search tasks from\n- options.cwd `path` `options.cwd` will be added to every target of each task configuration.\n\n### .npmTasks(moduleName)\n\nSimilar as `grunt.loadNpmTasks()`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig()`\n\n### .options(options)\n\nSets options for grunt cli.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.2.4","dist":{"shasum":"ceb1d64a97ad34d9c0aa9cff2939f9624cb5320f","tarball":"https://registry.npmjs.org/hum/-/hum-1.2.4.tgz","integrity":"sha512-vV6ZgB1KXYKrDpHZShENFpS44Fj45c3R+yeF/IHtIthW8b79+4DjuTagdpdyaPe1+4PDPeTYLXKVfBT+gd427w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr3S3cs2wthOdYWKjxwSxqgXO4CAfDY20RmHmK37Pp1wIhANkncaF/Fh43t3K+J+06mXK8aDOAQv/m/6LFKXTWzA5z"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.2.5":{"name":"hum","version":"1.2.5","description":"Hum, hum could run global grunt tasks which searched from specified paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run global grunt tasks which searched from specified paths.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>'\n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n- options.path `path` the path(s) to search tasks from\n- options.cwd `path` `options.cwd` will be added to every target of each task configuration.\n\n### .npmTasks(moduleName)\n\nSimilar as `grunt.loadNpmTasks()`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig()`\n\n### .options(options)\n\nSets options for grunt cli.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.2.5","dist":{"shasum":"c24288059af52c7654485a34919fcbb3a8793913","tarball":"https://registry.npmjs.org/hum/-/hum-1.2.5.tgz","integrity":"sha512-1nWoRKE70RlvZ7HAagb7Qc4oLjDu5Hku4aFZ/URWFBFe+7fCUKqS5pMOUwdaUWLi6IeKTu9JiYgRJb30729Pjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICT+FshPkfY5d09UbqmpHgLl/wkE+kBWtq6sZQL5I5zIAiBDJBT1NsgYhM16w4iZdaE0HFdKy402kKf24r94H6V60w=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.3.2":{"name":"hum","version":"1.3.2","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.3.2","dist":{"shasum":"a1a4a31f70c5c1f5e0db0af291ba5a7aba66d2cd","tarball":"https://registry.npmjs.org/hum/-/hum-1.3.2.tgz","integrity":"sha512-MqJmP5n3EIbadZC0h7so957KUnYRaJvo2DfmdsXmXHhUPMgQ4vcfYK7qjrpQQQXfmaMhMZZ3ZSiDhDl4XEx/vA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLYhKVlse7ForwTNGCGhZ0DYw29DO7R5x5ZifI3FyeugIhAPDOGZWP5EL/TBYzSd6IpFl27tMGGvF/xMagE56KiCVf"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.3.3":{"name":"hum","version":"1.3.3","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.3.3","dist":{"shasum":"8a877a3d9d30aae10785c77cadc0fa3c5cedb5d0","tarball":"https://registry.npmjs.org/hum/-/hum-1.3.3.tgz","integrity":"sha512-/AympftzNy9iQNpw6jS4w8BBgq3q12xiym9gFiHFF8gMiawy1bFWp2tPeiipocCS5kIqGf9FZyxr/jCdTy8NFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjTAonByVffHKmiaixL8fXus2TV8Vpel+Vga1/tH8p+AIhAJg8UsE3rGVCuiZPpC3kUAcjtuxHlEn2ZS5RjqztiBr1"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.3.4":{"name":"hum","version":"1.3.4","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.3.4","dist":{"shasum":"aa0640c1d90b88e742583445ac138416009ab431","tarball":"https://registry.npmjs.org/hum/-/hum-1.3.4.tgz","integrity":"sha512-vdXryUCsUbgDgyeFDgsFmMCfs8aYfJ7bRfrROUEyeRWREcNg6U+RahGablsF0tqyCaAsEpRAZlOSqEMMk79ugA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCk9iZkFCwlT6j+jAsCdAqsdeTxU/+xh+H35BFf9MMwLQIgL2zBHBymJtIOH8W7uvO1WNgCQB31sB6WvMnSMIqErsY="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}],"directories":{}},"1.3.5":{"name":"hum","version":"1.3.5","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.3.5","dist":{"shasum":"95d48f81ba4bc6eea77f3605c23f1571143fafb5","tarball":"https://registry.npmjs.org/hum/-/hum-1.3.5.tgz","integrity":"sha512-Bckek0KXJ7/URLZMZDzWjexiChcDjF6RJiASml9D4kQPPW+GMqUWfFsX28RNas+X3fL3n210gkJ0bRn4gBY5bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2dsZ1I28qlyM9Fuism2cCpyb+jHP9hPY9Eb/lurguLAiEA0LKMG407LnCKLM8Vtsjw1oSBWXmUuxZHKXloMPERqqs="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"1.3.6":{"name":"hum","version":"1.3.6","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~0.1.2"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@1.3.6","dist":{"shasum":"feb2f5e6206bc4eb2fbfa2b461c63c1bd8f50920","tarball":"https://registry.npmjs.org/hum/-/hum-1.3.6.tgz","integrity":"sha512-SNLVCa/sa9WW/REkCBEcXEv89GJvTNjY1N8PIiEK3E30sxk+tI+OmpzoE2LveWw6Ya9FM1V2g+lFEOdZCULHKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF437d8NJuxpjtrSsFGu1ukel5CQ86FkIfLr6BbepxM2AiBarzoGdHHTVzs53z9pZilpLMYfmOXLRsNncLBBbfifPQ=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.1":{"name":"hum","version":"2.1.1","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\n**hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n\n**hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.1","dist":{"shasum":"0b94fd1e876457aebcba4e6b9f6b1c6dc5c4a35d","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.1.tgz","integrity":"sha512-YDB3Ye9eWKRDoP6rikRe7uE4V58v3HwsIkLAzO6QA5XrLdbPyQ4CyvwjA9ey5xxWtUG9fQMO6+iG//M732cnFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHP3gkPTJRsArBpNQCOAcXH7EoL9BXkll9i2YF9RQ8sHAiB8xn4sCb0rfqVR2rlEZwnwx1kUuq5b04Q3cL5iYd0pyw=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.2":{"name":"hum","version":"2.1.2","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.2","dist":{"shasum":"4b022153f1c39f549d2f9e9aa83058b4bf939975","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.2.tgz","integrity":"sha512-qAt2NXS8CDzpagpUbsfxxRBZci3ZlFVy1TZpfKuOEN4BdaDRAGIoL2nzJtTZTzFGuVncH8uBfwrJA6PIwhaAMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQv78JV0ATqhgoImBkKXwQsH/i//wrt9UG7nzOROxO0AiBKX/MhpHs8xwxWhTOALR7AvcihCHIFJVdA3uuq8s70Mg=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.3":{"name":"hum","version":"2.1.3","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.3","dist":{"shasum":"21b6df0a945a5dc6510f02af529029adca771e60","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.3.tgz","integrity":"sha512-GblRE/WsW6C84RBAYPU8q1Un/YZersfGSgP4+mboGgL6LcCFrX+AyYVMqtEzg1mdcKEexulQPxQKyfoLc3KpGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHuN0TUXauaPEUX8ctYjOaIB9ugE+nUirV8yA2nsqInKAiBQu+aFeeJZwK42xgqcpHXXApL8F90xeHmBb89m5+cwDw=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.4":{"name":"hum","version":"2.1.4","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.4","dist":{"shasum":"2d9952c9f3f69a3c8b76b03053172cb7298823d0","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.4.tgz","integrity":"sha512-lR2fD3ZImSoeGmVkRxplv6IEOK8SrlyNzgbGO4T+MnwUwDm1GLtQaPx0tnbw0nawDSXsGiJ0faclmy2UlsvzXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4eHBtACfDaxZKaKoACcKwvgYlfOizf9LsGvaC0U7SBQIgYBG9pxhdboruxTR2dfpQnsIRuvc1bZdxKcAiDRCUO3Y="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.5":{"name":"hum","version":"2.1.5","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.5","dist":{"shasum":"8ba83dc2d4cc8330af459b5ca567f37ea3e1c0a2","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.5.tgz","integrity":"sha512-kpt/SCK1fHxniRR3rQTMPE+8ccdagAeJK0AB8OLanb8/3HTeGzzFH9xownGIO+noOZPqgosbXXjzxs20zT/+Zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOVs7Xvw5oozxv3z0aUC8ISFpKPIuq0gJX1RwIF8+jmwIgNmdgVU6nT4ACM00vfRDxQjZFgy2nmZKMXG8RXZfM3aI="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.6":{"name":"hum","version":"2.1.6","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.6","dist":{"shasum":"47f78e3bdd1885a50bda8d0a8208c1495540fd84","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.6.tgz","integrity":"sha512-A0NjmigSbop3DdPttYinTDDOYfziIWM3vcnnVKkCsa6VAj/6oAizNQFWFYr2A/EN+Jhzcff4GjdNO8ZL9rUQsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCY4CAUseth4hbxTJ+HEcBnBInCqT/gk6CPLfxZnR/+twIgcPy3ZrNdkWElyPqPFExqcEk01TmUbfi00SLMYIFBkPo="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]},"2.1.7":{"name":"hum","version":"2.1.7","description":"Hum, hum could run grunt inside a specified cwd and search tasks from the given paths.","main":"index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"},"keywords":["paths","grunt","task","grunt-tasks","custom","program"],"author":{"name":"kael"},"license":"MIT","bugs":{"url":"https://github.com/kaelzhang/node-hum/issues"},"engines":{"node":">=0.8.0"},"devDependencies":{"mocha":"~1.13.0","chai":"~1.8.0"},"dependencies":{"grunt":"~0.4.1","deferrer":"~1.1.0","async":"~0.2.9"},"readme":"# hum [![NPM version](https://badge.fury.io/js/hum.png)](http://badge.fury.io/js/hum) [![Build Status](https://travis-ci.org/kaelzhang/node-hum.png?branch=master)](https://travis-ci.org/kaelzhang/node-hum) [![Dependency Status](https://gemnasium.com/kaelzhang/node-hum.png)](https://gemnasium.com/kaelzhang/node-hum)\n\nPlay with grunt.\n\n## Features\n\n- **hum** could run [grunt](http://gruntjs.com) inside a specified cwd and search tasks from the given paths.\n- **hum** instances will be executed in series to prevent grunt (_which is composed of global variables and singletons_) fucking up with himself.\n- **hum** provides a programmatical way to run [grunt](http://gruntjs.com) tasks.\n\n## Installation\n\n```sh\nnpm install hum --save\n```\n\n## Usage\n\nActually, `hum` is an alternative of **Gruntfile.js** and supplies a bunch of promise-style APIs.\n\nWith `hum`, you could replace the code inside 'Gruntfile.js' with hum methods, and search available tasks only from your specified paths, as well as the `PATH` and `NODE_PATH` do.\n\nSo, it becomes possible for you to run a same tier of tasks for severial different projects.\n\n```js\nvar hum = require('hum');\n\nhum({\n\tpath: '</path/to/search>',\n\tcwd: \n})\n.npmTasks('my-task')\n.task('blah') // blah is defined in my-task\n.init({\n\t// task name\n\tblah: {\n\t\t// target must be defined\n\t\ttest: {\n\t\t}\n\t}\n})\n.options({\n\tverbose: true\n})\n.done(function(err){\n})\n```\n\n### Constructor: hum(options)\n\nCreates a hum instance.\n\n##### options.path \n\ntype `path` \n\nThe path(s) to search tasks from.\n\n##### options.cwd\n\ntype `path`, default to the `process.cwd`.\n\nIt will be added to every target of each task configuration and will affect all configurations related to `files`, `src`, and `dest`.\n\n##### options.strict_path\n\ntype `Boolean`, default to `false`\n\nBy default, hum will concat the `NODE_PATH` to the end of the path list.\n\n### .npmTasks(moduleName)\n\nSimilar to `grunt.loadNpmTasks(moduleName)`\n\n\n### .task(taskname)\n\nSpecifies the tasks to run, if no task is specified, hum will try to run the `'default'` task.\n\n### .init(config)\n\nSimilar to `grunt.initConfig(config)`\n\n### .options(options)\n\nSets options for grunt cli.\n\n`.options({verbose: true})` is equivalent to `grunt --verbose`.\n\n\n### .done(callback)\n\nThe promised callback.\n\n\n\n","readmeFilename":"README.md","_id":"hum@2.1.7","dist":{"shasum":"eb8a6c2d5a02371f287740ca37cb7a2950dfebdd","tarball":"https://registry.npmjs.org/hum/-/hum-2.1.7.tgz","integrity":"sha512-qyhJVgeFbCEQ6nBjfODuWyYemH4fWAxJahP/ScZqdYMMC4Wcfq5g01hjDIyeCQztDHx+s8vu/ItpsPoguEZMrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtT9Fsbn7aBpmlodEiuAtnCUcIVQ3xmF86ydsukAGziAIhAIL8UOvK+W5446cAu74tx/7Fhnc+maTLA0qNRbNRN03l"}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"kael","email":"i@kael.me"},"maintainers":[{"name":"kael","email":"i@kael.me"}]}},"readme":"ERROR: No README data found!","maintainers":[{"name":"kael","email":"i@kael.me"}],"time":{"modified":"2022-06-18T23:09:07.030Z","created":"2013-10-18T12:50:07.606Z","0.0.0":"2013-10-18T12:50:13.953Z","1.2.1":"2013-10-19T09:59:17.741Z","1.2.2":"2013-10-19T10:07:45.742Z","1.2.3":"2013-10-19T14:17:54.788Z","1.2.4":"2013-10-19T14:23:03.429Z","1.2.5":"2013-10-19T15:52:45.125Z","1.3.2":"2013-10-20T09:32:52.437Z","1.3.3":"2013-10-20T14:50:29.860Z","1.3.4":"2013-10-22T08:05:02.918Z","1.3.5":"2013-10-22T08:23:20.424Z","1.3.6":"2013-10-22T09:37:23.281Z","2.1.1":"2013-10-23T04:00:24.450Z","2.1.2":"2013-10-23T04:18:47.908Z","2.1.3":"2013-10-23T13:04:15.410Z","2.1.4":"2013-10-23T13:21:01.219Z","2.1.5":"2013-10-23T14:16:07.951Z","2.1.6":"2013-10-30T03:19:26.105Z","2.1.7":"2013-10-30T03:46:58.029Z"},"author":{"name":"kael"},"repository":{"type":"git","url":"git://github.com/kaelzhang/node-hum.git"}}