Vercel

用于 Vercel Serverless Functions 的 Swift 运行时和 SDK。

Vercel 入门套件

入门指南

查看入门介绍博文和 YouTube 教程以开始使用

这是如何工作的?

这个包中有两个重要的部分使一切正常工作

  1. 一个封装了 AWSLambdaRuntime 的 SDK,并提供对 Vercel 特定 API(如 EdgeConfig)的访问
  2. 一个 Swift Package 插件,用于构建你的代码并生成符合 Vercel Build Output API 的目录结构

用法

请求处理器

import Vercel

@main
struct App: RequestHandler {

    func onRequest(_ req: Request) async throws -> Response {
        let greeting = EdgeConfig.default.get("greeting").string!
        return .status(.ok).send("Hello, \(greeting)")
    }
}

Express 处理器

import Vercel

@main
struct App: ExpressHandler {

    static func configure(router: isolated Router) async throws {
        router.get("/") { req, res in
            res.status(.ok).send("Hello, Swift")
        }
    }
}

Vapor 处理器

import Vapor
import VercelVapor

@main
struct App: VaporHandler {

    static func configure(app: Application) async throws {
        app.get { _ in
            "Hello, Vapor"
        }
    }
}

并确保使用新软件包更新你的 Package.swift 文件

dependencies: [
  .product(name: "Vercel", package: "Vercel"),
  .product(name: "VercelVapor", package: "Vercel")
]

数据获取

你可以使用任何流行的库来获取数据,例如 Alamofire 或 async-http-client,但我们也在这个包中直接提供了一个方便的 fetch() 方法

let obj = try await fetch("https://httpbin.org/json").json()

Edge Config

此软件包提供对 Vercel Edge Config API 的完全访问权限。你可以访问默认的 Edge Config 存储或分配给你的项目的任何其他存储

// Default edge config
let str = EdgeConfig.default.get("some-string-key").string

// Edge config assigned to an environment variable
let num = EdgeConfig("EDGE_CONFIG_2").get("some-int-key").int

静态文件

你可以添加一个顶级的 public 文件夹,它将被静态部署到 Vercel 的 CDN。

Cron Jobs

通过在你的项目根目录中添加一个 vercel.json 文件并遵循此处的 Vercel 文档,可以完全支持 Cron jobs: https://vercel.com/docs/cron-jobs

本地运行

传统上,本地运行服务器端代码一直非常痛苦,但现在不再如此。这个包使得本地运行代码变得非常简单

swift package --disable-sandbox vercel dev

这将构建并运行你的 Swift 应用程序,并在 https://:7676 启动一个本地服务器

部署

本地

要在本地部署你的项目,你需要安装 Docker 和 Vercel CLI。安装完成后,你必须链接你的 Vercel 项目

vercel link

链接你的项目后,你可以通过 Swift Package Manager 部署它

swift package --disable-sandbox vercel deploy

部署选项

swift package --disable-sandbox vercel deploy

GitHub Actions

使用以下 GitHub Actions 工作流程来持续部署你的项目到 Vercel

name: Vercel

on:
  push:
    branches:
      - main

env:
  VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
  VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
  VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

jobs:
  deploy:
    runs-on: ubuntu-latest
    container: swift:5.10-amazonlinux2

    steps:
      - uses: actions/checkout@v3

      - uses: actions/cache@v3
        with:
          path: .build
          key: ${{ runner.os }}-spm-${{ hashFiles('Package.resolved') }}
          restore-keys: |
            ${{ runner.os }}-spm-

      - uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install
        run: npm install -g vercel@latest

      - name: Deploy
        run: swift package --disable-sandbox vercel deploy