/
index.js
36 lines (29 loc) · 970 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var _ = require('underscore'),
path = require('path'),
shell = require('shelljs'),
querystring = require('querystring');
module.exports = function(name, args, options) {
options = options || {};
args = args || [];
var bin = getNpmBin(name),
envs = envsToString(options.envs),
execOpts = _.pick(options, 'silent', 'async');
if (_.isString(args)) {
args = [args];
}
if (!shell.test('-e', bin)) {
shell.echo('Binary does not exist: ', bin);
shell.exit(1);
}
return shell.exec(envs + ' ' + bin + ' ' + args.join(' '), execOpts, options.callback);
};
var getNpmBin = function(name) {
var bin = path.join('node_modules', '.bin', name);
if (process.platform === 'win32') return bin + '.cmd';
return bin;
};
var envsToString = function(envs) {
if (!envs) return '';
querystring.escape = function(s) { return s; };
return querystring.stringify(envs, ' ', '=');
};