jstify2 v0.8.0
jstify
jstify is a Browserify transform for creating modules of pre-compiled Underscore templates. It allows setting the name of the _ module in the template output for use with lodash. Also minifies the template's HTML using HTMLMinifier before compilation.
Installation
With npm as a local development dependency:
npm install --save-dev jstifyConfiguration
jstify can take a configuration object with any of the following:
engine(optional): The value used forvar _ = require([engine]);in the template output. The default value isunderscore, but may be set tolodashfor example. Set it tolodash-microto only includelodash.escapeas a runtime dependency.withImports(optional): Whether to simulate Lo-Dash's_.templateSettings.importsin the compiled template. Defaults tofalse.templateOpts(optional): The options to pass to_.template. By default this is empty, check Underscore's template docs for more options.minifierOpts(optional): The options to pass to HTMLMinifer. By default,removeCommentsandcollapseWhitespaceare set totrue, everything else isfalse. See the HTMLMinifier options docs for more info.- Set to
falseto disableHTMLMinifier(This is useful for when your template looks like broken markup and the minifier is complaining).
- Set to
The transform is only be applied to .ejs, .tpl, .jst, or .html files.
Usage of engine=lodash-micro
When file size of the compiled template is critical use lodash-micro configuration for engine. As lodash.escape is the only runtime dependency, this reduces the minified file size to less than 1kb. This should only be used when the template is not using any underscore or lodash functions inline like _.each.
Usage
In templates/main.tpl:
<p>I like <%= noun %></p>In example/main.js:
var template = require('templates/main.tpl');
$('#main').html( template({ noun: 'red bull' }) );Transforming with the api
var browserify = require('browserify');
var fs = require('fs');
var b = browserify('example/main.js');
b.transform('jstify')
b.bundle().pipe(fs.createWriteStream('bundle.js'));Setting the engine to lodash:
b.transform('jstify', { engine: 'lodash' })Setting a mustache style interpolator, turning off comment removal and turning on redundant attribute removal:
b.transform('jstify', {
templateOpts: {
interpolate: /\{\{(.+?)\}\}/g
},
minifierOpts: {
removeComments: false,
removeRedundantAttributes: true
}
});Transforming with the command-line
browserify example/main.js -t jstify > bundle.jsSetting the engine to lodash:
browserify example/main.js -t [ jstify --engine lodash ] > bundle.jsTurning off comment removal:
browserify example/main.js -t [ jstify --minifierOpts [ --collapseWhitespace 0 ] ] > bundle.jsCommand-line caveat: Setting options in templateOpts that require a RegExp does not work.
Transformed Samples
Template source:
<div>
<p><%= "i like red bull" %></p>
</div>
<div>
i also like cat gifs
</div>Compiled without HTML minification:
var _ = require('underscore');
module.exports = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div>\n <p>'+
((__t=( "i like red bull" ))==null?'':__t)+
'</p>\n </div>\n\n<div>\n i also like cat gifs\n</div>';
}
return __p;
};Compiled with HTML minification:
var _ = require('underscore');
module.exports = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div><p>'+
((__t=( "i like red bull" ))==null?'':__t)+
'</p></div><div>i also like cat gifs</div>';
}
return __p;
};11 years ago