我想使用node-pandoc
模块从Markdown生成PDF。但我需要在飞行中创建那些降价。是否有任何可以生成明文/降价的node.js的模板引擎?
答案 0 :(得分:0)
我最近使用underscore的template
使用rho编写的纯文本文件(也是纯文本到HTML工具,如Markdown)来生成带有动态数据的纯文本文档:
这是我的模块的代码(如果你不需要它,省略缓存):
// compiler.js
'use strict';
var fs = require('fs')
, path = require('path')
, _ = require('underscore');
var cache = {};
exports.getTemplate = function(templateId, cb) {
// Use your extension here
var file = path.join(__dirname, templateId + ".rho");
fs.stat(file, function(err, stat) {
if (err) return cb(err);
// Try to get it from cache
var cached = cache[templateId];
if (cached && cached.mtime >= stat.mtime)
return cb(null, cached.template);
// Read it from file
fs.readFile(file, { encoding: 'utf-8' }, function(err, data) {
if (err) return cb(err);
// Compile it
var template = _.template(data);
// Cache it
cache[templateId] = {
mtime: stat.mtime,
template: template
};
// Return it
return cb(null, template);
});
});
};
exports.compile = function(templateId, data, cb) {
exports.getTemplate(templateId, function(err, template) {
if (err) return cb(err);
try {
return cb(null, template(data));
} catch (e) {
return cb(e);
}
});
}
现在用法。假设您hello.rho
包含以下内容:
# Hello, <%= name %>!
We are happy to have you here, <%= name %>!
您可以这样编译:
require('./compiler').compile('hello', { name: 'World' }, function(err, text) {
if (err) // Handle the error somehow
return console.log(err);
console.log(text);
// You'll get "# Hello, World!\n\nWe're happy to have you here, World!"
// Now chain the compilation to rho, markdown, pandoc or whatever else.
});
如果您不喜欢下划线,那么我猜ejs也可以正常工作。
答案 1 :(得分:0)
看一下grunt-readme,它虽然专注于从模板生成README文档,但它是如何从模板生成降价文档的一个很好的例子。