zyf-server
Version:
A modern HTTP static file server with Vue SSR directory listing, built for developers
59 lines • 1.94 kB
JavaScript
;
/**
* 模板引擎
* 处理EJS模板和Vue SSR渲染
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TemplateEngine = void 0;
const fs_1 = require("fs");
const path_1 = require("path");
const ejs_1 = __importDefault(require("ejs"));
const vue_server_renderer_1 = require("vue-server-renderer");
class TemplateEngine {
ssrTemplate;
ejsTemplate;
vueRenderer;
constructor() {
// 读取模板文件
this.ssrTemplate = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../templates/template.ssr.html'), 'utf8');
this.ejsTemplate = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../templates/template.html'), 'utf8');
// 读取Vue SSR bundle
const serverBundle = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../../../build/server.bundle.js'), 'utf8');
// 创建Vue SSR渲染器
this.vueRenderer = (0, vue_server_renderer_1.createBundleRenderer)(serverBundle, {
template: this.ssrTemplate,
});
}
/**
* 渲染EJS模板
*/
async render(template, data) {
return ejs_1.default.render(template, data);
}
/**
* 渲染Vue SSR
*/
async renderVueSSR(context) {
return new Promise((resolve, reject) => {
this.vueRenderer.renderToString(context, (err, html) => {
if (err) {
reject(err);
}
else {
resolve(html);
}
});
});
}
/**
* 渲染目录列表(使用EJS)
*/
async renderDirectoryListing(dirs) {
return this.render(this.ejsTemplate, { dirs });
}
}
exports.TemplateEngine = TemplateEngine;
//# sourceMappingURL=TemplateEngine.js.map