node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »



NPM version Standard - JavaScript Style Guide Build Status Coveralls Status Dependency Status Downloads

A handy command line interface for gulp


npm install --save-dev gulp-shell


const gulp = require('gulp')
const shell = require('gulp-shell')
gulp.task('example', () => {
  return gulp.src('*.js', {read: false})
    'echo <%= file.path %>'

Or you can use this shorthand:

gulp.task('greet', shell.task('echo Hello, World!'))

You can find more examples in the gulpfile of this project.

WARNING: Running commands like gulp.src('').pipe(shell('whatever')) is considered as an anti-pattern. PLEASE DON'T DO THAT ANYMORE.


shell(commands, options) or shell.task(commands, options)


type: Array or String

A command can be a template which can be interpolated by some file info (e.g. file.path).

WARNING: Using command templates can be extremely dangerous. Don't shoot yourself in the foot by passing arguments like $(rm -rf $HOME).


type: String

default: process.cwd()

Sets the current working directory for the command. This can be a template which can be interpolated by some file info (e.g. file.path).


type: Object

By default, all the commands will be executed in an environment with all the variables in process.env and PATH prepended by ./node_modules/.bin (allowing you to run executables in your Node's dependencies).

You can override any environment variables with this option.

For example, setting it to {PATH: process.env.PATH} will reset the PATH if the default one brings your some troubles.

type: String

default: /bin/sh on UNIX, and cmd.exe on Windows

Change it to bash if you like.


type: Boolean

default: false

By default, it will print the command output.


type: Boolean

default: false

Set to true to print the command(s) to stdout as they are executed


type: Boolean

default: false

By default, it will emit an error event when the command finishes unsuccessfully.


type: String

default: Command `<%= command %>` failed with exit code <%= error.code %>

You can add a custom error message for when the command fails. This can be a template which can be interpolated with the current command, some file info (e.g. file.path) and some error info (e.g. error.code).


type: Object

The data that can be accessed in template.


Details changes for each release are documented in the release notes.