#!/usr/bin/env node var optimist = require('optimist') .usage('Precompile handlebar templates.\nUsage: $0 template', { 'f': { 'type': 'string', 'description': 'Output File', 'alias': 'output' }, 'k': { 'type': 'string', 'description': 'Known helpers', 'alias': 'known' }, 'o': { 'type': 'boolean', 'description': 'Known helpers only', 'alias': 'knownOnly' } }) .check(function(argv) { var template = argv._[0]; if (!template) { throw 'Must define at least one template or directories.'; } try { fs.statSync(argv._[0]); } catch (err) { throw 'Unable to open template file "' + template + '"'; } }); var fs = require('fs'), handlebars = require('../lib/handlebars'); var argv = optimist.argv, template = argv._[0]; // Convert the known list into a hash var known = {}; if (argv.known && !Array.isArray(argv.known)) { argv.known = [argv.known]; } if (argv.known) { for (var i = 0, len = argv.known.length; i < len; i++) { known[argv.known[i]] = true; } } // First figure out what our output looks like fs.readFile(template, 'utf8', function(err, data) { if (err) { throw err; } var options = { knownHelpers: known, knownHelpersOnly: argv.o }; var output = 'Handlebars.template(' + handlebars.precompile(data, options) + ')'; if (argv.output) { fs.writeFileSync(argv.output, output, 'utf8'); } else { console.log(output); } });