> Discover all available pages from the documentation index: https://mastra.zisheng.pro/llms.txt # Deployer Deployer 通过打包代码、管理环境文件以及使用 Hono 框架提供应用,处理独立 Mastra 应用的部署。具体实现必须为特定部署目标定义 deploy 方法。 ## 使用示例 要创建自定义 deployer,可以扩展抽象 `Deployer` 类,并使用你的特定部署逻辑实现 `deploy` 方法。示例如下: ```typescript import { Deployer } from '@mastra/deployer' class CustomDeployer extends Deployer { constructor() { super({ name: 'custom-deployer' }) } async deploy(outputDirectory: string): Promise { // Prepare the output directory await this.prepare(outputDirectory) // Bundle the application await this._bundle('server.ts', 'mastra.ts', outputDirectory) // Custom deployment logic } } ``` ## 参数 ### 构造函数参数 **args** (`object`): Deployer 的配置选项。 **args.name** (`string`): deployer 实例的唯一名称。 ### deploy 参数 **outputDirectory** (`string`): 输出已打包且可部署应用的目录。 ## 方法 **getEnvFiles** (`() => Promise`): 返回部署期间使用的环境文件列表。默认查找 '.env.production' 和 '.env' 文件。 **deploy** (`(outputDirectory: string) => Promise`): 必须由子类实现的抽象方法。处理到指定输出目录的部署过程。 ## 从 bundler 继承的方法 Deployer 类从 Bundler 类继承以下关键方法: **prepare** (`(outputDirectory: string) => Promise`): 通过清理输出目录并创建必要的子目录来准备输出目录。 **writePackageJson** (`(outputDirectory: string, dependencies: Map) => Promise`): 使用指定依赖在输出目录中生成 package.json 文件。 **\_bundle** (`(serverFile: string, mastraEntryFile: string, outputDirectory: string, bundleLocation?: string) => Promise`): 使用指定的服务器文件和 Mastra 入口文件打包应用。 ## 核心概念 ### 部署生命周期 Deployer 抽象类实现了结构化的部署生命周期: 1. **初始化**:使用名称初始化 deployer,并创建用于依赖管理的 Deps 实例。 2. **环境设置**:`getEnvFiles` 方法识别部署期间要使用的环境文件(.env.production、.env)。 3. **准备**:`prepare` 方法(继承自 Bundler)清理输出目录并创建必要的子目录。 4. **打包**:`_bundle` 方法(继承自 Bundler)打包应用代码及其依赖。 5. **部署**:由子类实现抽象 `deploy` 方法,以处理实际部署过程。 ### 环境文件管理 Deployer 类通过 `getEnvFiles` 方法内置了环境文件管理支持。该方法: - 按预定义顺序查找环境文件(.env.production、.env) - 使用 FileService 查找第一个存在的文件 - 返回找到的环境文件数组 - 如果未找到环境文件,则返回空数组 ```typescript getEnvFiles(): Promise { const possibleFiles = ['.env.production', '.env.local', '.env']; try { const fileService = new FileService(); const envFile = fileService.getFirstExistingFile(possibleFiles); return Promise.resolve([envFile]); } catch {} return Promise.resolve([]); } ``` ### 打包与部署的关系 Deployer 类扩展了 Bundler 类,在打包与部署之间建立了明确的关系: 1. **打包是前置条件**:打包是部署的前置步骤,会将应用代码封装为可部署格式。 2. **共享基础设施**:打包与部署共享依赖管理和文件系统操作等通用基础设施。 3. **专用部署逻辑**:打包侧重于封装代码,而部署会添加面向具体环境的逻辑来部署已打包的代码。 4. **可扩展性**:抽象 `deploy` 方法支持为不同目标环境创建专用 deployer。