当年,为了消除不同架构指令集的差异,人们发明了C语言,写出了可以迁移的操作系统
为了消除操作系统的差异,人们发明了web标准,让浏览器统一标准
现在,又有了各种serverless平台,它们已经套了一层层的抽象,提供不同的Runtime API。
现在,就连JS本身,也不是“一次编写,到处运行”了!JS已经是终端用户手中兼容性最高的语言,但是serverless平台又让它无法到处运行。
我们都知道,如果我们要写一些简单的API,我们可以用Cloudflare Workers、Netlify Functions、Vercel Functions这些serverless的服务,它们免费提供很多次API调用,让你免费托管你的API或者是GitHub镜像站、DockerHub镜像站之类的东西。
但是,如果有一天,你想把你的服务迁移到其他平台呢?甚至,如果你想要写一个大项目,其中涉及到KV数据库等等,并且你还希望能够适应不同的平台呢?
这种方法是存在的!
[Hono](https://hono.dev/)是一个纯JS的Web框架,它可以让你的同一份代码经过较小的改动在不同平台运行。此外它的API很简洁。
此外,还有一个更加全面的选手,[Nitro](https://nitro.unjs.io/),它将KV数据库、SQL数据库、WebSockets等也提供了跨运行时的封装,这意味着你可以用同一份代码操作Cloudflare和Vercel的KV数据库。这个组织叫unjs,意为Unified JavaScript Tools,他们真的想要实现“一次编写,到处运行”的愿景,可谓志向远大。他们的KV层[unstorage](https://unstorage.unjs.io/)也可以单独使用,实现跨运行时的持久化存储。
当然,这些只是愿景,它们能不能真的打破serverless平台之间的隔阂,还很难说。不过,起码有人在尝试。