崮生(子虚) 0693521716 feat: SDK 抽取为 webfont-sdk npm 包 + leafer-x-webfont 插件(浏览器验证通过)
- packages/webfont-sdk:TS 重写,IncrementalEngine 核心(去重/并发池/失败字符记忆/retryFailed)
  - CSS 模式(WebFont)API 与旧 public/webfont-sdk.js 完全兼容
  - FontFace 模式(WebFontCanvas)供 Canvas 场景,unicodeRange 注册 + onChunk 回调
  - tsdown 双产物:dist/(ESM+dts)+ dist-iife/(script 直引)
  - scripts/sync-public.mjs 构建后同步到 public/webfont-sdk.js
  - 修复 banner 内嵌套块注释导致的语法错误(/* 重绘 */ 提前闭合 banner)
- packages/leafer-x-webfont:LeaferJS 插件,依赖 webfont-sdk
  - 监听 property.change + layout.end 防抖扫描 Text 节点聚合字符
  - 新旧 API 兼容(on_/on__、off_/off__)
  - 注册后自动改写 fontFamily 为合法 CSS 名(去 .ttf 后缀)
  - demo/index.html:海报场景(标题/副标题/字体切换/导出 PNG)本地 vendor 验证通过
- backend/app.ts:fs 适配层改为 top-level await import(修复 dev 模式 mkdir 崩溃)
- doc/:商业化思路一/二评估 + 主动拓客文档
2026-08-15 13:07:32 +08:00

44 lines
1.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 构建后同步脚本:把 IIFE 产物带用法 banner 写入主站 public/webfont-sdk.js
* index.html 引用 /webfont-sdk.js?v=%BUILD_TIME%,产物路径不变、零改动。
*/
import { readFileSync, writeFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url'
import { dirname, resolve } from 'node:path'
const pkgRoot = dirname(dirname(fileURLToPath(import.meta.url)))
const source = resolve(pkgRoot, 'dist-iife/iife.iife.js')
const target = resolve(pkgRoot, '../../public/webfont-sdk.js')
const banner = `/**
* WebFont SDK — 按需增量加载字体片段,无闪烁(本文件由 packages/webfont-sdk 构建,勿手改)
*
* 架构:核心增量引擎 + 两种注册模式
* - 核心IncrementalEngine 按 fontKey 管理字符集,只请求增量;失败字符自动记忆不重试
* - CSS 模式WebFontloadFont轮询/ observeFontDOM 事件)/ loadText手动传文本
* - FontFace 模式WebFontCanvasCanvas/canvas 场景FontFace + unicodeRange 注册
*
* 用法:
* // 轮询模式
* WebFont.loadFont({ fontName, selector, family, interval });
*
* // 事件驱动模式
* var obs = WebFont.observeFont({ fontName, selector, family });
* obs.dispose();
*
* // 直接传文本模式
* var loader = WebFont.loadText({ fontName, text: "你好世界", family });
* loader.update("追加文字");
* loader.dispose();
*
* // Canvas 模式leafer / 原生 canvas
* var face = WebFontCanvas.loadFontFace({ fontName }, function (chunk) { 在此重绘 });
* face.update("画布上的文字");
* await WebFontCanvas.ready();
*/
`
writeFileSync(target, banner + readFileSync(source, 'utf8'))
console.log(`synced: ${target} (from ${source})`)