| #! /usr/bin/env node |
| |
| 'use strict'; |
| |
| var async = require('async'); |
| var spawn = require('child_process').spawn; |
| var fs = require('fs'); |
| var path = require('path'); |
| |
| var base = process.cwd(); |
| var dirs = fs.readdirSync(base); |
| |
| var tasks = []; |
| dirs.forEach(function(dir) { |
| var fulldir = path.join(base, dir); |
| |
| // a plugin contains package.json in root |
| var pkg = path.join(fulldir, 'package.json'); |
| if (!fs.existsSync(pkg)) return; |
| var pstat = fs.statSync(pkg); |
| if (!pstat.isFile()) return; |
| |
| // a plugin contains index.js in root |
| var index = path.join(fulldir, 'index.js'); |
| if (!fs.existsSync(index)) return; |
| var istat = fs.statSync(index); |
| if (!istat.isFile()) return; |
| |
| tasks.push(function(cb) { |
| console.log('\nrunning "npm install" in', fulldir, '...'); |
| var cmd = process.platform === 'win32' ? 'cmd' : 'npm'; |
| var args = process.platform === 'win32' ? ['/c', 'npm', 'install'] : ['install']; |
| var child = spawn(cmd, args, { |
| cwd: fulldir, |
| stdio: 'inherit' |
| }); |
| child.on('close', function(code) { |
| console.error(' ->', code === 0 ? 'OK' : 'failed: ' + code); |
| cb(code); |
| }); |
| }); |
| }); |
| |
| async.series(tasks, function(err, results) { |
| if (err) { |
| console.error('npm install failed: ', err); |
| } else { |
| console.error('npm install OK'); |
| } |
| process.exit(err ? 1 : 0); |
| }); |