From a0c2b4aafcd6e85891e60b46cd45800c1dd44230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=AE=E7=94=9F=EF=BC=88=E5=AD=90=E8=99=9A=EF=BC=89?= <2234839456@qq.com> Date: Sat, 15 Aug 2026 15:51:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20webfont-sdk=20Node=20=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20+=20leafer=20=E7=89=88=E5=9F=BA=E5=87=86=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=EF=BC=88=E5=8F=8C=E6=96=B9=E6=A1=88=E5=B9=B6=E5=AD=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - webfont-sdk: 新增 Node 模式(node-registry),GlobalFonts 注册 + 每 chunk 唯一 family + 逗号链回退 - leafer-x-webfont: fontFamily 链写回(Node 端),scan 链归一化防套娃、rewriteFamily 跳过链形态防抹回 - 修复 pnpm 双实例 bug: @napi-rs/canvas 版本对齐 1.0.6(根与 SDK 同版本共享 .pnpm 条目) - 基准测试重构: 用例表抽取为 基准测试用例.ts 共享,SSIM 计算收敛到 scripts/ssim.ts - 新增 基准测试_leafer.test.ts: @leafer-ui/node + Skia 渲染验证(无浏览器),ttf 输出用例 SSIM=1.0000;woff2 用例仅计时(Skia 不吃 woff2,容器验证由 puppeteer 版守护) - Node 端集成测试 scripts/test-leafer-node.mts(插件链路 SSIM=1.0000) --- .gitignore | 3 + package.json | 4 + packages/leafer-x-webfont/demo/index.html | 5 +- packages/leafer-x-webfont/src/index.ts | 73 ++++++- packages/webfont-sdk/package.json | 8 + packages/webfont-sdk/src/fontface-mode.ts | 63 +++++- packages/webfont-sdk/src/index.ts | 2 + packages/webfont-sdk/src/node-registry.ts | 139 +++++++++++++ pnpm-lock.yaml | 186 ++++++++++++++++++ public/webfont-sdk.js | 132 ++++++++++++- scripts/ssim.ts | 92 +++++++++ scripts/test-leafer-node.mts | 85 ++++++++ 基准测试.test.ts | 158 +-------------- 基准测试_leafer.test.ts | 225 ++++++++++++++++++++++ 基准测试用例.ts | 93 +++++++++ 15 files changed, 1092 insertions(+), 176 deletions(-) create mode 100644 packages/webfont-sdk/src/node-registry.ts create mode 100644 scripts/ssim.ts create mode 100644 scripts/test-leafer-node.mts create mode 100644 基准测试_leafer.test.ts create mode 100644 基准测试用例.ts diff --git a/.gitignore b/.gitignore index e4e90fc..fb005d9 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,6 @@ benchmark_results packages/*/dist packages/*/dist-iife packages/leafer-x-webfont/demo/vendor + +# leafer 插件类型声明的 vendor(从 npm @leafer-ui/interface 拷贝,体积大) +packages/leafer-x-webfont/vendor diff --git a/package.json b/package.json index 1f01d2e..7906292 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "web-streams-polyfill": "^4.3.0" }, "devDependencies": { + "@leafer-ui/node": "2.2.9", "@types/node": "^26.1.1", "@vitejs/plugin-vue": "^6.0.8", "@xmldom/xmldom": "^0.9.10", @@ -39,5 +40,8 @@ "vitest": "^4.1.10", "vue": "3.6.0-beta.17", "vue-router": "^5.2.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^1.0.6" } } diff --git a/packages/leafer-x-webfont/demo/index.html b/packages/leafer-x-webfont/demo/index.html index 81e8e78..be3ea50 100644 --- a/packages/leafer-x-webfont/demo/index.html +++ b/packages/leafer-x-webfont/demo/index.html @@ -44,9 +44,10 @@
- + + - +