#!/usr/bin/env node var program = require('commander'); // usage program .version(require('../package').version) .usage(' [options]'); // sub-command help program.on('--help', function(){ console.log(' Commands:'); console.log(); console.log(' build build the component'); console.log(' crawl crawl a github user/organization for components'); console.log(' duplicates check for multiple versions of dependencies'); console.log(' install [name ...] install and save one or more components'); console.log(' link [folder] symlink a component'); console.log(' ls list installed components'); console.log(' outdated check for outdated pinned dependencies'); console.log(' pin pin ranged dependencies'); console.log(' search [query] search with the given query'); console.log(' update update pinned dependencies') console.log(' validate validate component.json\'s'); console.log(); console.log(' For more help, run `component build -h` for relevant links.'); console.log(); process.exit(); }); // parse argv program.parse(process.argv); var spawn = require('win-fork'); var path = require('path'); var fs = require('fs'); var join = path.join; var stat = fs.statSync; var exists = fs.existsSync; var resolve = path.resolve; // args void of cmd var args = process.argv.slice(3); // command var cmd = program.args[0]; // alias "install" as "add" if ('add' === cmd) cmd = 'install'; // display help if (!cmd) program.help(); // executable var bin = 'component-' + cmd; // local or resolve to absolute executable path var local = join(__dirname, bin); if (exists(local)) { bin = local; } else { bin = process.env.PATH.split(path.delimiter).reduce(function(binary, p) { p = resolve(p, bin); return exists(p) && stat(p).isFile() ? p : binary; }, bin); } // display help if bin does not exist if (!exists(bin)) { console.error('\n %s(1) does not exist', bin); program.help(); } // spawn var proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }); proc.on('close', function(code){ process.exit(code); });