关于Bun build --compile嵌入JSON资源后embeddedFiles无显示的疑问
Bun中导入JSON文件时
Bun.embeddedFiles为空是否是预期行为? 这确实是预期行为,核心原因是Bun对不同类型的资源导入采用了完全不同的处理逻辑:
- 默认导入JSON(或显式指定
type: "json")时,Bun会在构建编译阶段直接把JSON内容解析成JavaScript对象,将这个对象的代码逻辑直接嵌入到可执行文件里。这种情况下,JSON内容是作为代码的一部分存在的,不属于"独立嵌入文件"范畴,自然不会出现在Bun.embeddedFiles数组中,但依然能正常访问解析后的对象,移动可执行文件也不影响使用。 - 当指定
type: "file"导入时,Bun会把整个JSON文件以Blob的形式完整嵌入到可执行文件中,这类资源会被Bun.embeddedFiles追踪,同时返回的是文件的虚拟访问路径。此时需要你自行读取Blob内容并解析成JSON对象。
如果想要让JSON文件既出现在Bun.embeddedFiles中,又能得到解析后的JSON对象,可以这样处理:
import Bun from "bun"; import testPath from "./test.json" with { type: "file" }; // 从embeddedFiles中找到对应的Blob并解析 const testBlob = Bun.embeddedFiles.find(blob => blob.name.includes("test.json")); const test = testBlob ? await testBlob.json() : null; console.log(Bun.embeddedFiles); console.log(test);
执行这段代码编译后的可执行文件,就能同时看到Bun.embeddedFiles中的Blob对象,以及解析后的{ foo: "bar" }结果。
内容的提问来源于stack exchange,提问作者Filip Seman
相关产品推荐
相关产品推荐

