#!/usr/bin/env node var path = require('path'); var fs = require('fs'); var resolve = require('resolve'); var NODE_PATH = process.env.NODE_PATH; // This wrapper only resolves which instance of Karma should be run. // All the logic is in the main Karma module. // The resolving algorithm checks (in this order): // - a local module (using `require`, so it will traverse up, looking for `node_modules/karma`), // - a siblink module to karma-cli (that loads the global karma, when using NVM), // - a global module (NODE_PATH) var requireCliAndRun = function(karmaPath) { if (process.argv.indexOf('--which') !== -1) { console.log(karmaPath); } else { require(karmaPath + '/lib/cli').run(); } }; resolve('karma', {basedir: process.cwd()}, function(err, pathToKarma) { // There is a local version, let's use it. if (!err) { return requireCliAndRun(pathToKarma.replace(/\/lib\/index\.js/, '')); } // We can't load a global one, since NODE_PATH is not defined. if (!NODE_PATH) { // Let's try a siblink to karma-cli, that is a global module with NVM. var siblinkKarma = path.normalize(__dirname + '/../../karma'); if (fs.existsSync(siblinkKarma)) { return requireCliAndRun(siblinkKarma); } console.error('Cannot find local Karma!\n' + ' Please install Karma by `npm install karma --save-dev`.\n' + ' If you wanna use a global instance, please set NODE_PATH env variable.\n'); return; } // Let's try global paths. var globalPaths = NODE_PATH.split(path.delimiter); var globalKarma; while (globalPaths.length) { globalKarma = path.normalize(globalPaths.shift() + '/karma'); if (fs.existsSync(globalKarma)) { return requireCliAndRun(globalKarma); } } console.error('Cannot find local Karma!\n' + ' Please install karma by `npm install karma --save-dev`.\n'); });