Stringify
Browserify plugin to require() text files (like templates) inside of your client-side JavaScript files.
Installation
npm install stringify
Usage
Setup Browserify to use this middleware in your app:
var browserify = require('browserify'),
stringify = require('stringify');
var bundle = browserify()
.transform(stringify(['.hjs', '.html', '.whatever']))
.add('my_app_main.js');
app.use(bundle);
You might have noticed that you can pass stringify an optional array of file-extensions that you want to require() in your Browserify packages as strings. By default these are used: .html, .txt, .text, and .tmpl
NOTE: You MUST call this as I have above. The Browserify .transform() method HAS to plug this middleware in to Browserify BEFORE you add the entry point (your main client-side file) for Browserify.
Now, in your clientside files you can use require() as you would for JSON and JavaScript files, but include text files that have just been parsed into a JavaScript string:
var my_text = require('../path/to/my/text/file.txt');
console.log(my_text);
More Realistic Example & Use-Case
The reason I created this was to get string versions of my Handlebars templates required in to my client-side JavaScript. You can theoretically use this for any templating parser though.
Here is how that is done:
application.js:
var browserify = require('browserify'),
stringify = require('stringify');
var bundle = browserify()
.transform(stringify(['.hbs', '.handlebars']))
.addEntry('my_app_main.js');
app.use(bundle);
my_app_main.js:
var Handlebars = require('handlebars'),
template = require('my/template/path.hbs'),
data = require('data.json');
var hbs_template = Handlebars.compile(template);
var constructed_template = hbs_template(data);
my/template/path.hbs:
<p>{{ json_data }}</p>
data.json
{
"json_data": "This is my string!"
}