KonghaYao / cn-font-split

划时代的字体切割工具,CJK与任何字符!支持 otf、ttf、woff2 字体多线程切割,完美地细颗粒度地进行包大小控制。A revolutionary font subetter that supports CJK and any characters! It enables multi-threaded subset of otf, ttf, and woff2 fonts, allowing for precise control over package size.
https://chinese-font.netlify.app/
Apache License 2.0
442 stars 15 forks source link

动态导入兼容 #61

Closed KazariEX closed 3 months ago

KazariEX commented 3 months ago

在某些情况下,通过动态导入的模块不含 default 字段。

推荐修改为如下导入方式。

// packages/subsets/src/utils/resolveNodeModule.ts
- const { default: module } = await import('node:module');
+ const { Module } = await import('node:module');
KonghaYao commented 3 months ago

具体是在 node 的几个版本的情况呢,因为这个模块是涉及到了 node 的原生模块 module,一般都是 commonjs 导入的,会处理成 default 导出。

KazariEX commented 3 months ago

Node 18, 22 的最新版本在 CJS 和 ESM 中直接使用均正常,但是在通过 Nuxt 模块导入时 default 字段会消失,我不了解它内部的具体运行方式

KonghaYao commented 3 months ago

你是通过 vite-plugin-font 使用的吗,还是直接在服务端使用 cn-font-split 进行了处理呢

KazariEX commented 3 months ago

在开发环境直接导入 cn-font-split 处理,这是报错

image

KazariEX commented 3 months ago

我是否需要提供一个最小实现?

KonghaYao commented 3 months ago

嗯,如果能有一个范例的话,我这边比较好帮你做一个适配嘿

KonghaYao commented 3 months ago

或者你只想要导入你的字体,可以尝试一下 vite-plugin-font,应该 nuxt 的 vite 也是支持的,就不用自己在服务端处理了。这样开个 nuxt 的小范例,我这边做适配即可

KazariEX commented 3 months ago

https://github.com/KazariEX/cn-font-split-nuxt

KazariEX commented 3 months ago

我想要利用 Nuxt Module 的能力实现一定的声明式导入字体,所以还是希望能够在服务端单独处理的

KonghaYao commented 3 months ago

稍等发个新版本应该就可以了

KazariEX commented 3 months ago

感谢作者 所以这种修改方式是可行的吗,我对动态导入研究不深,不确定是否存在其他隐患

KonghaYao commented 3 months ago

我升级版本到 4.14.1, 然后发现 nuxt 的编译系统好像 对 require 有些问题,导致 bug 了,现在正在排查中

image
KonghaYao commented 3 months ago

4.14.2 修复了,原因是 nitro 对于 require 错误解析了 nuxt 应该都有这些奇奇怪怪的问题,后续有问题再单独开 issues 吧。 修复的 demo 通过 PR 提交到你的复现了。 @KazariEX

KazariEX commented 3 months ago

了解了,那看来应该是 nuxt 上游的问题

KonghaYao commented 3 months ago

感谢作者 所以这种修改方式是可行的吗,我对动态导入研究不深,不确定是否存在其他隐患

我检查了构建产物和最终的构建效果,应该是没有问题的,cn-font-split 在 server 端构建出 css ,最终产物中没有 cn-font-split。