refactor: 完成Handlebars模板组件化

This commit is contained in:
Zuoling Rong
2025-05-08 01:32:14 +08:00
parent 6474fa3635
commit 9ea6cb1f09
24 changed files with 1440 additions and 598 deletions

64
src/helpers/index.js Normal file
View File

@@ -0,0 +1,64 @@
/**
* Handlebars助手函数中心
*
* 导入并重导出所有助手函数方便在generator中统一注册
*/
const formatters = require('./formatters');
const conditions = require('./conditions');
const utils = require('./utils');
/**
* 注册所有助手函数到Handlebars实例
* @param {Handlebars} handlebars Handlebars实例
*/
function registerAllHelpers(handlebars) {
// 注册格式化助手函数
Object.entries(formatters).forEach(([name, helper]) => {
handlebars.registerHelper(name, helper);
console.log(`Registered formatter helper: ${name}`);
});
// 注册条件判断助手函数
Object.entries(conditions).forEach(([name, helper]) => {
handlebars.registerHelper(name, helper);
console.log(`Registered condition helper: ${name}`);
});
// 注册工具类助手函数
Object.entries(utils).forEach(([name, helper]) => {
handlebars.registerHelper(name, helper);
console.log(`Registered utility helper: ${name}`);
});
// 注册HTML转义函数作为助手函数方便在模板中调用
handlebars.registerHelper('escapeHtml', function(text) {
if (text === undefined || text === null) {
return '';
}
return String(text)
.replace(/&/g, "&")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
});
// 注册非转义助手函数安全输出HTML
handlebars.registerHelper('safeHtml', function(text) {
if (text === undefined || text === null) {
return '';
}
return new handlebars.SafeString(text);
});
console.log('All Handlebars helpers registered successfully.');
}
// 导出所有助手函数和注册函数
module.exports = {
formatters,
conditions,
utils,
registerAllHelpers
};