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

bun 运行报错,疑似上游依赖导致 #69

Closed mobeicanyue closed 3 months ago

mobeicanyue commented 3 months ago
bun i cn-font-split

bun add v1.1.13 (bd6a6051)

installed cn-font-split@4.15.1 with binaries:
 - cn-font-split

31 packages installed [8.01s]
ls

bun.lockb              MiSansArabic-Demibold.otf  MiSansArabic-Normal.otf  package.json
MiSansArabic-Bold.otf  MiSansArabic-Medium.otf    node_modules             split.mjs
bun split.mjs ./MiSansArabic-Bold.otf ./build
217 |           )
218 |           try {
219 |             if (localFileExisted) {
220 |               nativeBinding = require('./woff-build.linux-x64-gnu.node')
221 |             } else {
222 |               nativeBinding = require('@napi-rs/woff-build-linux-x64-gnu')
                    ^
TypeError: ~/Code/npm/misans-bash/tmp/misana-arabic/node_modules/@napi-rs/woff-build-linux-x64-gnu/woff-build.linux-x64-gnu.node: undefined symbol: BrotliDecoderDecompress
      at ~/Code/npm/misans-bash/tmp/misana-arabic/node_modules/@napi-rs/woff-build/index.js:222:15

Bun v1.1.13 (Linux x64)

split.mjs 内容如下

import { fontSplit } from 'cn-font-split';

const args = process.argv.slice(2);

fontSplit({
    FontPath: args[0],
    destFold: args[1],
    testHTML: false, // html 报告文件
    reporter: false, // json 格式报告
    css: {
        comment: {
            base: false,
            nameTable: false,
        },
        compress: true, // 是否压缩 css
    },
    // 重命名输出文件
    renameOutputFont: '[index][ext]'
});
KonghaYao commented 3 months ago

这个依赖好久没更新了,应该不是这个问题,如果可以的话,可以使用 node 跑跑试试

mobeicanyue commented 3 months ago

事实上 node 真的可以 image

依赖甚至还是 bun i cn-font-split 的依赖

KonghaYao commented 3 months ago

感觉 bun 对于 .node 文件还没有适配完全,然后这个依赖写的有点问题,本来应该先尝试使用 wasm 的

KonghaYao commented 3 months ago

后面会给一个选项,强制使用 wasm 模式

mobeicanyue commented 3 months ago

https://github.com/KonghaYao/cn-font-split/issues/65#issuecomment-2162699921

最奇怪的是,直接运行 cn-font-split (通过 bun i -g 安装) 或者 bunx cn-font-split 都可以运行无报错

KonghaYao commented 3 months ago

因为 cn-font-split 是懒加载这个依赖的,所以 bunx 应该还没执行到。node 针对 .node 文件支持好,所以没事

mobeicanyue commented 3 months ago

image

cn-font-split -i=./MiSansArabic-Bold.otf -o=./dist --renameOutputFont='[index][ext]' --reporter='false' --testHTML='false'

或者

bunx cn-font-split -i=./MiSansArabic-Bold.otf -o=./dist --renameOutputFont='[index][ext]' --reporter='false' --testHTML='false'

这样似乎不会报错

项目使用全局安装,项目文件夹未安装 cn-split 依赖

node 针对 .node 文件支持好,所以没事。

这是什么意思? 我用 bun 安装的实际上是 node 在运行吗?

KonghaYao commented 3 months ago

bun 应该是和 node 共享依赖了,cn-font-split 在 bin 文件头部指定了使用 node,所以被安装到全局之后,会使用 node 的运行时。bunx 则是以 bun 的命令行形式运行的,采用的是 bun 的运行时。

mobeicanyue commented 3 months ago

用 bunx 好像也是 node image

KonghaYao commented 3 months ago

在我写第三版本的时候,还没有 bun,所以识别的是 node,后面也一直没有改过来。 因为 bun 和 node 太像了,所以是没有进一步区分出 bun 与 node 。

mobeicanyue commented 3 months ago

意思是用命令行跑 bunx cn-font-split 的时候,实际上是 node 的运行时吗?