首頁 > web前端 > js教程 > Vercel 上快速、簡單的 NestJS 應用程式部署

Vercel 上快速、簡單的 NestJS 應用程式部署

Mary-Kate Olsen
發布: 2024-11-29 06:23:10
原創
192 人瀏覽過

這篇文章也可以在我的部落格上找到:https://hamidreza.tech/nestjs-on-vercel

如果您使用 Express 轉接器,本指南會很有幫助。對於使用 Fastify 適配器的 NestJS 應用程序,這些連結可能會有所幫助:

  • https://fastify.dev/docs/latest/Guides/Serverless/#vercel

  • https://github.com/vercel/examples/tree/main/starter/fastify

?您可以在此 GitHub 儲存庫中存取本文中討論的完整原始程式碼:https://github.com/mahdavipanah/nestjs-on-vercel

Vercel 對 Express 應用程式的支持

Vercel 提供了一項便捷的功能,用於透過以下方式部署 Express 應用程式:

  1. 在 API 中公開 Express 應用程式物件。

  2. 定義一個重寫規則,將所有傳入流量導向此單一 API。

我依照 Vercel 的官方 Express 部署指南部署 NestJS,方法類似地公開 NestJS 的底層 Express 應用程式物件。

第 1 步 - 建立一個 NestJS 應用程式

如果您已經設定了 NestJS 應用,請跳過此步驟。

安裝 NestJS 並建立一個新應用程式:

nest new my-app
登入後複製
登入後複製

第 2 步 - 安裝必要的 NPM 軟體包

npm install express @nestjs/platform-express
npm install -D @types/express
登入後複製

步驟 3 - 建立 src/AppFactory.ts 文件

此檔案用作管理所有必要的 NestJS 應用程式引導的單一模組,並匯出 NestJS 應用程式及其底層 Express 應用程式物件。

在專案根目錄的 src 目錄中建立一個名為 AppFactory.ts 的檔案:

import { ExpressAdapter } from '@nestjs/platform-express';
import { NestFactory } from '@nestjs/core';
import express, { Request, Response } from 'express';
import { Express } from 'express';
import { INestApplication } from '@nestjs/common';
import { AppModule } from './app.module.js';

export class AppFactory {
  static create(): {
    appPromise: Promise<INestApplication<any>>;
    expressApp: Express;
  } {
    const expressApp = express();
    const adapter = new ExpressAdapter(expressApp);
    const appPromise = NestFactory.create(AppModule, adapter);

    appPromise
      .then((app) => {
        // You can add all required app configurations here

        /**
         * Enable cross-origin resource sharing (CORS) to allow resources to be requested from another domain.
         * @see {@link https://docs.nestjs.com/security/cors}
         */
        app.enableCors({
          exposedHeaders: '*',
        });

        app.init();
      })
      .catch((err) => {
        throw err;
      });

    // IMPORTANT This express application-level middleware makes sure the NestJS app is fully initialized
    expressApp.use((req: Request, res: Response, next) => {
      appPromise
        .then(async (app) => {
          await app.init();
          next();
        })
        .catch((err) => next(err));
    });

    return { appPromise, expressApp };
  }
}
登入後複製

第 4 步 - 修改 src/main.ts 文件

預設情況下,NestJS 有一個 src/main.ts 檔案作為應用程式的入口點,包括所有配置和引導。修改此檔案以將所有內容移至 AppFactory.ts 檔案中,僅保留監聽方法的呼叫:

import { AppFactory } from './AppFactory.js';

async function bootstrap() {
  const { appPromise } = AppFactory.create();
  const app = await appPromise;

  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
登入後複製

第 5 步 - 新增 api/index.ts 文件

預設情況下,Vercel 執行階段會建置專案的 /api 目錄中建立的任何函數並將其提供給 Vercel (doc)。由於 Vercel 理解並處理 Express 應用程式對象,因此在此目錄中建立一個導出 Express 應用程式物件的函數:

/**
 * This file exports Express instance for specifically for the deployment of the app on Vercel.
 */

import { AppFactory } from '../src/AppFactory.js';

export default AppFactory.create().expressApp;
登入後複製

第 6 步 - 新增 vercel.json 文件

在專案根目錄下建立一個名為 vercel.json 的檔案來設定 Vercel。在這裡,為 Vercel 定義一個重寫規則,以使用 Express 應用程式來服務所有傳入流量 (doc)。

您也可以使用 api 目錄中的 tsconfig.json 檔案來設定 Vercel 的 TypeScript 編譯器。除了 「路徑映射」「Pr物件參考s」 之外,大多數選項均受支援。

nest new my-app
登入後複製
登入後複製

第 7 步 - 在 Vercel 上建立項目

恭喜? !我們快完成了。現在,建立一個 git 儲存庫並將原始程式碼推送到其中。然後,前往您的 Vercel 帳戶,建立一個新項目,並匯入 git 儲存庫。您也可以使用本文的範例 GitHub 儲存庫。

Fast and Simple NestJS App Deployment on Vercel

以上是Vercel 上快速、簡單的 NestJS 應用程式部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板