最近我在给 AirCode 写写代码,调研了很多 Serverless/FaaS 的产品和社区,重新考虑了一下 Node.js 服务端结构的展开。

众所周知,现在前端结构如漫山遍野,前有react、vue,后有 svelte、solid 等等,以及一些前端+BFF的社区也层出不穷,代表的如 react 技术栈的 Next.js,vue 技术栈的 Nuxt.js。各种 Runtime 展开也很快,除了传统的 Node,还有 Deno、Bun 以及 Edge Runtime 等。但是中心层的服务端结构好像有些断层,很多人还在使用 Express 或许 Koa、新一点的 Fastify 也是3、4年前诞生的,用的都是相对比较传统的规划思想。

我想已然前(FE+BFF)后(Runtime)都有不少新东西,那么中心的 Framework 也可以卷一卷,所以使用研讨 AirCode 的机遇,我在考虑能不能规划一个轻量级的 FaaS 结构,让它既能很方便地工作于本地,又可以在将来需求上线安置的时分可以无缝地一键安置到 AirCode 平台上。

于是,这个新的结构 Hydrogen 诞生了。

3202年了,你还在用express写Node服务吗?

这个新结构我给命名为 Hydrogen,是氢元素的意思,既照应 AirCode 的 Air,又表明这是一个极简略轻量的结构。

结构特性

它有如下的特性:

  • 内置 HMR(Hot Module Replacement)支撑快速开发
  • 支撑 CommonJS (.js .cjs)、ES 模块 (.mjs) 和 TypeScript (.ts) 函数,开箱即用。
  • 几乎不需求任何装备。
  • ️ 内置了现成的文本数据库和文件 API。
  • 遵照直观的目录结构约好。
  • 选用纯 JavaScript 编写,规划简练漂亮。
  • ⚡️ 无论是开发环境仍是出产环境,都优化了工作功用。
  • 兼容并可以在 AirCode 平台上无缝工作您的使用。

快速启用

只需你的 Node.js 版别在 14+,只需求以下两行指令就可以快速创建并发起项目:

  1. Create an aircode app
npx create-aircode-app@latest my-aircode-app && cd my-aircode-app
  1. Install dependencies and run
npm i && npm start

项目目录结构

Hydrogen 选用十分简略直观的项目目录结构

├──functions # put your function api here.
│ └── hello.js # http://localhost:3000/hello
├──public # put your static resources here.
│ └── favicon.ico # 
└── package.json

项目的云函数存放于 functions 目录下,服务发起后通过 /子目录/函数名 访问,子目录不包括 functions 目录自身。

项目的静态资源文件存放于 public 目录下,服务发起后通过 /public/子目录/文件名 访问。

创建云函数

Hydrogen 默许支撑 cjs、mjs 和 ts 的云函数,你只需创建对应的 .js|.mjs|.ts 文件就可以。

云函数只需求导出一个异步函数,这个函数返回的任何数据自动被作为 response.body 返给客户端。

// hello.js or hello.cjs
const aircode = require('aircode');
module.exports = async function(params, context) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.'
  };
}
// hello.mjs
import aircode from 'aircode';
export default async function (params, context) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.',
  };
};
// hello.ts
import aircode from 'aircode';
export default async function (params: any, context: any) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.',
  };
};

以上三个函数任何一个放在 functions 目录下,服务发起后,都可以通过途径 /hello 访问。

具体文档

Hydrogen 的云函数 paramscontext 提供了恳求参数访问和各种操作方法,aircode.dbaircode.files 提供了内置数据库和文件API。

具体资料见下方的文档:

  • Cloud Function
  • The Database
  • The File API

安置和集成

Hydrogen 项目彻底兼容 AirCode 的标准,可以通过 GitHub 一键安置到 AirCode 中发布到线上工作。

这部分,后续有机遇再单独具体介绍。


大家还等什么,有喜好的同学可以访问代码库房装置并使用 Hydrogen。

如有任何问题,欢迎留言讨论