mirror of
https://github.com/zhigang1992/grunt-bg-shell.git
synced 2026-04-29 04:25:02 +08:00
118 lines
2.9 KiB
Markdown
118 lines
2.9 KiB
Markdown
grunt-bg-shell
|
|
============
|
|
|
|
Improve your workflow by running commands in the background and in parallel using [Grunt](https://github.com/gruntjs/grunt).
|
|
|
|
## Getting Started
|
|
*Note: This plugin requires Grunt `~0.4.0`*
|
|
|
|
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
|
|
|
|
```shell
|
|
npm install grunt-bg-shell --save-dev
|
|
```
|
|
Then add the task to your `Gruntfile.js` with this line:
|
|
```js
|
|
grunt.loadNpmTasks('grunt-bg-shell');
|
|
```
|
|
|
|
## Sample Usage
|
|
|
|
For example, say you want to run your node server and also compile coffeescript and sass/scss files all in the same terminal. You could acheive that with the following config:
|
|
|
|
```javascript
|
|
module.exports = function (grunt) {
|
|
grunt.initConfig({
|
|
bgShell: {
|
|
_defaults: {
|
|
bg: true
|
|
},
|
|
|
|
watchCompass: {
|
|
cmd: 'compass watch'
|
|
},
|
|
watchCoffee: {
|
|
cmd: 'coffee --watch --output lib/ src/'
|
|
},
|
|
runNode: {
|
|
cmd: 'node server.js',
|
|
bg: false
|
|
}
|
|
}
|
|
});
|
|
grunt.registerTask('default', ['bgShell:watchCompass','bgShell:watchCoffee','bgShell:runNode']);
|
|
};
|
|
```
|
|
|
|
## Available Options
|
|
```javascript
|
|
bgShell: {
|
|
lsTasks: {
|
|
cmd: 'ls -la', // or function(){return 'ls -la'}
|
|
execOpts: {
|
|
cwd: './tasks'
|
|
},
|
|
stdout: true,
|
|
stderr: true,
|
|
bg: false,
|
|
fail: false,
|
|
done: function(){}
|
|
}
|
|
}
|
|
```
|
|
* `cmd`: command to execute or `function(){}` that returns a command to execute
|
|
* `execOpts`: options for
|
|
[`child_process.exec`](http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback).
|
|
If `execOpts.maxBuffer` set to `false`, `0`, `NaN` or `Infinite` it won't buffer stdout and stderr for `done` callback
|
|
* `stdout`: `true`, `false` or `function(out){}`
|
|
* `stderr`: `true`, `false` or `function(err){}`
|
|
* `bg`: background execution
|
|
* `fail`: fail grunt on error
|
|
* `done`: callback after execution `function(err, stdout, stderr){}`
|
|
|
|
|
|
## Default Options
|
|
```javascript
|
|
bgShell: {
|
|
_defaults: {
|
|
execOpts: {},
|
|
stdout: true,
|
|
stderr: true,
|
|
bg: false,
|
|
fail: false,
|
|
done: function (err, stdout, stderr) {
|
|
}
|
|
},
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
If you get
|
|
```
|
|
Error: stdout maxBuffer exceeded
|
|
```
|
|
You should set `execOpts.maxBuffer` to `false`. But you won't get stdout and strerr in `done` callback
|
|
|
|
Example:
|
|
```javascript
|
|
bgShell: {
|
|
lsTasks: {
|
|
cmd: 'ls -la',
|
|
execOpts: {
|
|
maxBuffer: false
|
|
},
|
|
stdout: function(chunk){
|
|
// process your stdout chunk
|
|
},
|
|
stderr: function(chunk){
|
|
// process your stderr chunk
|
|
},
|
|
done: function (err, stdout, stderr) {
|
|
// stdout === null
|
|
// stderr === null
|
|
}
|
|
}
|
|
}
|
|
```
|