A simple egg view plugin, allow you to render static html from app/public
.
$ npm i egg-view-static --save
// {app_root}/config/plugin.js
exports.viewStatic = {
enable: true,
package: 'egg-view-static',
};
Set mapping in config
// {app_root}/config/config.default.js
exports.view = {
defaultViewEngine: 'static',
mapping: {
'.html': 'static',
},
};
Render in controller
// {app_root}/app/controller/home.js
class HomeController extends Controller {
async index() {
// app/static/index.html
await this.ctx.render('index.html');
}
}
Use replaceFn
to custom render with locals, see test/fixtures/apps/locals/config/config.default.js for more detail.
// {app_root}/config/config.default.js
config.viewStatic = {
replaceFn(tpl, locals) {
return tpl.toString().replace(/(\\)?{{ *(\w+) *}}/g, (block, skip, key) => {
if (skip) {
return block.substring(skip.length);
}
return locals.hasOwnProperty(key) ? locals[key] : block;
});
},
};
// {app_root}/app/controller/home.js
class HomeController extends Controller {
async index() {
// app/static/index.html
await this.ctx.render('index.html', { name: 'egg' });
}
}
// {app_root}/config/config.default.js
exports.viewStatic = {
// cache: true,
// replaceFn: (tpl, locals, options) => tpl,
};
- {Boolean}
cache
- whether cache file, default totrue
exceptlocal
mode. It will share cache withegg-static
LRU cache. - {Function}
replaceFn
- custom render replacement, args =(tpl, locals, options)
see config/config.default.js for more detail.
Please open an issue here.