UNPKG

cleverstack-cli

Version:
84 lines (68 loc) 2.04 kB
var spawn = require('child_process').spawn , readline = require('readline') , os = require('os') , isWin = /^win32/.test(os.platform()); /** * Runs bower install * * @param {String} modulePath Path to the directory in which bower.json resides * @param {Object} options Object given to us from commander * @param {Callback} fn Callback function * @return {Function} Returns fn * @public */ exports.install = function(modulePath, options, fn) { var additionalOptions = [ ] , params = { cwd: modulePath }; if (typeof options === 'function') { fn = options; options = { }; } options = typeof options === 'object' && options !== null ? options : { }; additionalOptions.push('install'); if (program.allowRoot) { additionalOptions.push('--allow-root'); } // Bower specific arguments var bowerArgs = [ 'cwd', 'directory' ].filter(function(option) { return options.hasOwnProperty(option); }); if (bowerArgs.length) { additionalOptions.push('-F'); // force } bowerArgs.forEach(function(option) { additionalOptions.push('--config.' + option + '=' + options[ option ]); }); // Any additional paramters in which we want to allow within spawn() [ 'env' ].filter(function(key) { return program.hasOwnProperty(key); }) .forEach(function(key) { params[ key ] = params[ key ]; }); if (!!program.verbose) { additionalOptions.push('--verbose'); } var posixProc = spawn(!isWin ? 'bower' : 'bower.cmd', additionalOptions, params) , error; if (!!program.verbose || process.mainModule.filename.match('build')) { readline .createInterface({ input : posixProc.stdout, terminal : false }) .on('line', function(line) { console.log(' ' + line); }); } posixProc.on('error', function(err) { error += err; }); posixProc.on('close', function(code) { if (code !== 0 || !!error) { fn(error); } else { fn(null); } }); };