diff --git a/lib/cli.js b/lib/cli.js index 1dc7f70..2b29e12 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -5,13 +5,16 @@ var commander = require('commander'); var continuation = require('../continuation'); var meta = require('../package.json'); +try {var coffeescript = require('coffee-script');} catch (err) {} +try {var livescript = require('LiveScript');} catch (err) {} + var options = { explicit: false, sourceMap: true, verbose: false, cache: false, force: false, - indent: ' ', + indent: ' ' }; var cacheDefaultPath = '/tmp/continuation'; @@ -65,7 +68,7 @@ var main = exports.main = function () { if (print) { outputCode(filename, code); } else { - runCode(code, filename); + executeTopModule(code, filename); } }; @@ -87,54 +90,52 @@ var outputCode = function (originalFilename, code) { } }; -var runCode = function (code, filename) { +var executeTopModule = function (code, filename) { //Set current module information var mainModule = require.main; mainModule.filename = filename; mainModule.moduleCache = {}; mainModule.children = []; mainModule.paths = calculatePaths(filename); - //Register require handler - require.extensions['.js'] = execute; - require.extensions['.coffee'] = execute; - require.extensions['.ls'] = execute; - + registerRequire(); //Generate program arguments var args = commander.args.slice(1); process.argv = [process.argv[0], filename].concat(args); - //Run mainModule._compile(code, filename); }; +var registerRequire = function() { + require.extensions['.ls'] = execute; + require.extensions['.js'] = execute; + require.extensions['.coffee'] = execute; +}; + var compile = function (filename) { - - if (options.verbose) { - console.error('Load ' + filename); - } - + var code; if (options.cache) { code = readCache(filename); if (code !== null) { - if (options.verbose) { - console.error('Cache hit'); - } return code; } } - - var code = fs.readFileSync(filename, 'utf-8'); - try { + code = fs.readFileSync(filename, 'utf-8'); var ext = path.extname(filename); if (ext === '.coffee') { //Coffee-script support - coffeescript = require('coffee-script'); + if (!coffeescript) { + console.error('CoffeeScript not found. Use: npm install -g coffee-script'); + process.exit(-1); + } code = coffeescript.compile(code); } else if (ext === '.ls') { //LiveScript support - var livescript = require('LiveScript'); + if (!livescript) { + console.error('LiveScript not found. Use: npm install -g LiveScript'); + process.exit(-1); + } code = livescript.compile(code); } code = continuation.compile(code, options); @@ -143,14 +144,12 @@ var compile = function (filename) { console.error(err.stack); process.exit(-1); } - if (options.cache) { if (options.verbose) { - console.error('Cache updated'); + console.error('Updated ' + filename); } writeCache(filename, code); } - return code; }; @@ -185,7 +184,7 @@ var readCache = function (filename) { var stat = fs.lstatSync(cachedFilePath); var cacheMtime = stat.mtime; - var stat = fs.lstatSync(filename); + stat = fs.lstatSync(filename); var sourceMtime = stat.mtime; if (sourceMtime > cacheMtime) {