我要写一个express3下解决mustache-like模板引擎针对layout和partial处理的完美解决插件,你们会用么?
发布于 1年前 作者 mytharcher 690 次浏览

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太直白了点。

说好的插件写好了,名字就还是暂定mustlayout了,有兴趣的可以围观一下:https://github.com/mytharcher/mustlayout

回到顶部