express 3.0开始移除了所有模板引擎layout的支持,hogan和handlebar里虽然部分支持了layout,但只有一层。另外partial的处理也非常蛋疼,得开发者自己去写路径。
所以准备写个npm包解决掉这些问题,将支持多层嵌套(类似smarty的模板继承),自动预处理所有模板,缓存等。基本不影响原有使用方式。不知道用mustache-like模板引擎的人多么,有这需求么?
3 回复
目前的基本思路是在express应用启动前完成多层模板嵌套(继承)的解析合并,并在app.engine
阶段直接将当期使用的模板引擎目录指向到完成了解析合并的target目录。这样做一来可以做完预先解析,二来对原有的使用方式完全没有影响。
于是设计了下面几种API的usage,想看看大家更倾向于哪种?
1. 基本原生模式
var app = express();
var mustlayout = require('mustlayout');
// 这一段完成对`views`目录中模板的解析合并
mustlayout.resolve(views, options);
// 在原有使用hogan的基础上进行包装调用
app.engine(viewExt, mustlayout.delegate(hogan));
app.set('view engine', viewExt);
app.set('views', views);
2. 封装调用模式
var app = express();
require('mustlayout').engine(app, {
engine: require('handlebars'),
ext: '.tpl',
views: '/views',
partials: '/views/partials',
layouts: '/views/layouts',
cache: '/views/cache'
});
这种模式直接将所有express模板引擎的配置封装到mustlayout
包的里,一个调用搞定,而不用考虑原来express中的写法,可以让模板引擎的相关配置更加统一。
不论使用上述何种方式,最终在模板渲染的时候都只有一句话:
app.get('/test', function (req, res, next)) {
// 选择`/views`目录中的`test.tpl`模板作为目标渲染
res.render('test', {
name: 'abc',
value: 12345
});
}
而不用考虑layouts和partials要去自己写,这些都应该是模板test.tpl
本身当中应该自己定义好的事情。
另外还想征集一下npm的名字,总觉得mustlayout
太直白了点。