feat(icon): 支持读取iconfont图标前缀并生成对应ts文件

- 新增getIconPrefix函数读取图标前缀配置
- 在generateTypeScript函数中支持传入图标前缀参数
- 优化处理流程,当文件夹不是iconfont时读取其前缀
This commit is contained in:
haibiao_gu
2025-11-03 09:49:18 +08:00
parent c9d38852e9
commit 33e59242c0

View File

@@ -101,9 +101,9 @@ function ttfToBase64(ttfPath) {
}
// 生成TypeScript文件
function generateTypeScript(originalFolderName, camelCaseName, iconData) {
function generateTypeScript(originalFolderName, camelCaseName, iconData, iconPrefix) {
const tsContent = `export const ${ camelCaseName } = {\n${ iconData
.map((item) => `\t"${item.name}": "${item.unicode}"`)
.map((item) => `\t"${ iconPrefix }${ item.name }": "${ item.unicode }"`)
.join(",\n") }\n};\n`;
const outputPath = path.join("icons", originalFolderName, "index.ts");
@@ -159,6 +159,17 @@ function processIconData(jsonPath) {
}
}
// 读取iconfont图标前缀
function getIconPrefix(jsonPath) {
try {
const jsonData = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
return jsonData.css_prefix_text;
} catch (error) {
console.error(`❌ 读取JSON文件失败: ${jsonPath}`, error);
return [];
}
}
// 将连字符转换为驼峰命名的函数
function toCamelCase(str) {
return str.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());
@@ -204,9 +215,14 @@ function processZipFile(zipFileName) {
let iconData = [];
let iconPrefix = "";
// 优先使用JSON文件
if (jsonPath) {
iconData = processIconData(jsonPath);
if (originalFolderName !== "iconfont") {
iconPrefix = getIconPrefix(jsonPath);
}
}
// 如果没有则尝试CSS文件
else if (cssPath) {
@@ -234,7 +250,7 @@ function processZipFile(zipFileName) {
ensureDistDir(originalFolderName);
// 生成TypeScript文件 (使用驼峰命名作为变量名,原始名称作为路径)
generateTypeScript(originalFolderName, folderName, iconData);
generateTypeScript(originalFolderName, folderName, iconData, iconPrefix);
// 生成SCSS文件 (使用原始名称作为路径和字体名称)
generateSCSS(originalFolderName, base64Data);