1#!/usr/bin/env node 2var {program} = require('commander'); 3var precompile = require('../src/precompile').precompile; 4var Environment = require('../src/environment').Environment; 5var lib = require('../src/lib'); 6 7var cmdpath = null; 8 9program 10 .storeOptionsAsProperties(false) 11 .passCommandToAction(false); 12 13program 14 .name('precompile') 15 .usage('[-f|--force] [-a|--filters <filters>] [-n|--name <name>] [-i|--include <regex>] [-x|--exclude <regex>] [-w|--wrapper <wrapper>] <path>') 16 .arguments('<path>') 17 .helpOption('-?, -h, --help', 'Display this help message') 18 .option('-f, --force', 'Force compilation to continue on error') 19 .option('-a, --filters <filters>', 'Give the compiler a comma-delimited list of asynchronous filters, required for correctly generating code') 20 .option('-n, --name <name>', 'Specify the template name when compiling a single file') 21 .option('-i, --include <regex>', 'Include a file or folder which match the regex but would otherwise be excluded. You can use this flag multiple times', concat, ['\\.html$', '\\.jinja$']) 22 .option('-x, --exclude <regex>', 'Exclude a file or folder which match the regex but would otherwise be included. You can use this flag multiple times', concat, []) 23 .option('-w, --wrapper <wrapper>', 'Load a external plugin to change the output format of the precompiled templates (for example, "-w custom" will load a module named "nunjucks-custom")') 24 .action(function (path) { 25 cmdpath = path; 26 }) 27 .parse(process.argv); 28 29function concat(value, previous) { 30 return previous.concat(value); 31} 32 33if (cmdpath == null) { 34 program.outputHelp(); 35 console.error('\nerror: no path given'); 36 process.exit(1); 37} 38 39var env = new Environment([]); 40 41const opts = program.opts(); 42 43lib.each([].concat(opts.filters).join(',').split(','), function (name) { 44 env.addFilter(name.trim(), function () {}, true); 45}); 46 47if (opts.wrapper) { 48 opts.wrapper = require('nunjucks-' + opts.wrapper).wrapper; 49} 50 51console.log(precompile(cmdpath, { 52 env : env, 53 force : opts.force, 54 name : opts.name, 55 wrapper: opts.wrapper, 56 include : [].concat(opts.include), 57 exclude : [].concat(opts.exclude) 58})); 59