如何在Bun.js中抑制包含非HTML标记的HTMLParseError警告
看起来你遇到的问题是Bun的HTML解析器把Tumblr模板里的花括号变量占位符当成了真实的本地文件路径,从而抛出了HTMLParseError警告对吧?这种情况确实挺头疼的,毕竟这些占位符是模板语法,不是实际的资源引用。我来给你几个可行的思路试试:
给bun-plugin-html配置资源忽略规则
这个插件的核心功能是处理HTML里的资源引用,默认会校验src这类属性的路径是否存在。你可以试试在插件配置里添加一个忽略规则,告诉它所有以{开头、}结尾的内容都是模板变量,不需要校验。配置大概长这样:import html from 'bun-plugin-html'; await Bun.build({ entrypoints: ['./src/index-tmp.html'], outdir: './dist', plugins: [ html({ assets: { // 用正则匹配所有模板变量格式的资源引用 ignore: [/^\{.*\}$/] } }) ] });这个正则会匹配像
{PhotoURL-500}这类占位符,让插件跳过对它们的存在性校验。先预处理HTML,替换占位符为临时路径
如果插件本身不支持这种忽略规则,那可以先写个简单的脚本预处理你的模板文件:把所有{...}格式的src值替换成一个你项目里实际存在的临时占位文件(比如/assets/temp-placeholder.png,随便放个空图就行)。等Bun完成构建后,再把输出文件里的临时路径替换回原来的模板变量。这种方法虽然多了两步,但胜在兼容性好,不管插件有没有配置选项都能生效。用非标准属性绕过校验
你还可以把模板里的src暂时改成data-src,比如:<img data-src="{PhotoURL-500}" {block:HighRes}style="display:none"{/block:HighRes} />这样Bun的解析器就不会去校验这个属性的路径了。等构建完成后,再用脚本把所有
data-src替换回src就行。这种方法操作简单,就是需要额外的后处理步骤。调整jsdom的配置(如果错误来自jsdom)
你提到了jsdom标签,要是这个解析错误是jsdom抛出的(Bun可能依赖它处理HTML),那可以尝试在jsdom的配置里关闭资源加载,或者设置一个虚拟的url,让它不要去校验本地文件。不过如果是bun-plugin-html封装了jsdom,可能需要看插件有没有暴露这个配置的入口,或者你得自己稍微修改下插件的逻辑。
另外,如果你实在找不到现成的配置,也可以去bun-plugin-html的GitHub仓库搜搜Issues,说不定有其他用户遇到过同样的Tumblr模板兼容问题,已经有人给出了解决方案。还有,尽量别用--silent这类全局抑制警告的参数,不然会错过其他有用的错误信息,得不偿失。
备注:内容来源于stack exchange,提问作者lharby

