近日,Bun的开发者Jarred Sumner宣布了JavaScript运行时环境Bun的最新版本——1.0.26的发布。Bun不仅是一个运行时环境,还集成了打包器、转译器和包管理器的功能。在这个新版本中,Bun带来了一系列的改进和修复,包括解决了30个bug,增加了对bun:sqlite中多语句查询的支持,提升了bun --watch在长时间运行中的可靠性,以及对Bun.FileSystemRouter的路由数量进行了扩展。
具体到功能改进上,Bun 1.0.26版本增加了对bun:sqlite多语句查询的支持。这意味着开发者可以在单次调用db.run()
时执行多个SQL语句,提高了开发效率和灵活性。此外,bun --watch命令在这个版本中得到了改进,增加了防御性的文件描述符关闭机制,以防在监视大量文件时出现资源耗尽等问题。在Linux系统中,Bun使用了close_range(2)
系统调用,在重新加载进程之前关闭所有文件描述符,而在macOS上,通过使用POSIX_SPAWN_CLOEXEC_DEFAULT
标志实现了类似的功能。
值得一提的是,Bun的FileSystemRouter现在支持超过64条路由。之前版本中,使用超过64条路由时会引发无法捕获的异常,这一问题已经在1.0.26版本中得到了修复。
此外,关于错误处理方面,Bun修复了error.stack
有时返回undefined的问题,并且解决了error.stack
CallSite lineNumber有时为负数的问题。此外,Bun还修复了Error.prepareStackTrace
默认未定义的问题,使其行为与Node.js保持一致。
关于测试方面,Bun解决了expect(a).toStrictEqual(b)
在比较带有删除属性的对象时的错误处理问题。之前的版本中,这可能会引发一个带有空diff的错误,而现在这一问题已经得到了正确的处理。
在网络通信方面,Bun修复了Bun.serve()中WebSocket的事件循环调度问题,保证在执行事件循环回调后总是清空微任务队列,避免内存过高增长的问题。
在对Node.js兼容性的提升上,Bun 1.0.26版本对module.path
进行了修正,使其行为更加符合Node.js的规范。另外,该版本对new Response(Bun.file())
偶尔在stderr中记录错误的问题也进行了修复。
值得关注的是,Bun在Windows平台的支持也在稳步推进中。虽然目前78%的测试已通过,但开发团队认为这还不足以发布Windows版本。大部分在此版本中的更改都与Windows相关,但由于尚未正式发布,因此在此次更新日志中并未涉及。
Bun的这些更新显示了它作为一个现代JavaScript工具的持续成长和完善。对于开发者而言,这意味着更高的效率和更稳定的开发体验。随着Windows版本的即将到来,Bun的受众和应用范围预计将会进一步扩大。