2012-07-21 13 views
7

So Datei ich ejs Vorlagen in eine JS-Dateiwie vorkompilieren Sie ejs Vorlagen

var compiled = ejs.compile(source); 
fs.writeFileSync(target, 'myTemplateFunction = ' + compiled); 

aber das serilalizes in

function (locals){ 
    return fn.call(this, locals, filters, utils.escape); 
} 

was ist der beste Weg, um vorkompilieren vorzukompilieren wollte und Schreiben Sie ejs-Vorlagen in eine .js-Datei

Antwort

0

Sie können eine templates.js-Datei (entweder manuell oder im Code) als leeres Modul erstellen. Fügen Sie dann nach dem Kompilieren von Vorlagen die kompilierte Funktion dem leeren Modul bei.

var ejs = require('ejs'); 
var fs = require('fs'); 

fs.writeFileSync('./template.js', 'module.exports = { }', 'utf8'); 

var compiled = ejs.compile(fs.readFileSync('./example.ejs', 'utf8')); 

// Add an example function to the template file that uses the compiled function 
require('./template').example = compiled; 

// Get the example template again (this could be in another file for example) 
var output = require('./template').example; 
var html = output({ id: 10, title: 'Output' }); 

Da modules are cached sollten standardmäßig Sie require('./template.js') der Lage sein, wo auch immer Sie brauchen, und es wird angebracht all die vorkompilierte Vorlagen.

+1

Dies bezieht sich nicht auf Serialisierungsvorlagen, was die eigentliche Frage war. – Avius

0

Lodash _.template() Methode erstellt eine Stringdarstellung der EJS-Vorlagenfunktion während der Kompilierung und fügt sie als Quelle Eigenschaft an die kompilierte Funktion an. Sie können diese Zeichenfolge in einer JS-Datei speichern, in HTML einbetten oder vor dem Einschlafen Ihren Enkeln vorlesen.

Zum Beispiel:

> var _ = require('lodash'); 
> var compiled = _.template('Hi <%= user %>!'); 
> compiled({ user: 'Axel' }) 
"Hi Axel!" 
> compiled.source 
"function(obj) { 
    obj || (obj = {}); 
    var __t, __p = ''; 
    with (obj) { 
    __p += 'Hi' + ((__t = (user)) == null ? '' : __t) + '!'; 
    } 
    return __p 
}" 
> var fs = require('fs') 
> var src = 'module.exports = ' + compiled.source; 
> fs.writeFileSync('mylittlescript.js', src); 

Dieser Ansatz ist von Webpack ejs-loader Modul verwendet wird. Beachten Sie auch, dass das npm-Paket ejs keine solche Quelle Eigenschaft bietet.