You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby的ExecJS中使用bun.sh替代Node.js作为运行时?

用Bun替代Node.js作为ExecJS运行时的解决方案

错误原因

你遇到的uninitialized constant ExternalRuntime错误,是因为ExternalRuntime是ExecJS模块下的嵌套类,不能直接裸用,必须加上命名空间前缀ExecJS::。

修正后的代码

require 'execjs'
require "execjs/external_runtime"

PATH_TO_JS = File.join(__dir__, "katex.min.js") # 移除开头多余的/,避免路径拼接异常
BUN = ExecJS::ExternalRuntime.new(
      name:        "Bun",
      command:     ["bun"], # Bun直接支持运行JS代码,无需额外的run子命令
      runner_path: ExecJS.root + "/support/node_runner.js", # Bun兼容Node核心API,可复用该runner文件
      encoding:    'UTF-8'
)
# 用File.read替代open,避免文件资源泄漏问题
KATEX = BUN.compile(File.read(PATH_TO_JS, encoding: 'UTF-8'))

额外注意事项

  • 确保Bun已安装并加入系统环境变量PATH,执行bun --version能正常输出版本号。
  • 如果复用node_runner.js出现兼容性问题,可自定义极简runner文件(比如bun_runner.js):
    process.stdin.pipe(process.stdout);
    require(process.argv[1]);
    
    然后将runner_path指向这个自定义文件即可。

内容的提问来源于stack exchange,提问作者Jan Černý

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:05:54