mirror of
https://github.com/2234839/web-font.git
synced 2026-09-13 04:15:42 +08:00
- 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/:商业化思路一/二评估 + 主动拓客文档
44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
/**
|
||
* 构建后同步脚本:把 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 模式(WebFont):loadFont(轮询)/ observeFont(DOM 事件)/ loadText(手动传文本)
|
||
* - FontFace 模式(WebFontCanvas):Canvas/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})`)
|