跳过主要内容

如何自定义构建脚本:Capacitor CLI

了解如何使用Capacitor CLI自定义构建脚本,实现高效的部署和针对各个平台的应用更新。

马丁·多纳迪厄

马丁·多纳迪厄

内容营销人员

如何自定义构建脚本:Capacitor CLI

Capacitor CLI允许您自定义应用程序的构建过程,适用于iOS、Android和Web平台。通过调整构建脚本,您可以:

  • 加速更新: 立即推送更改,无需等待应用商店延迟。
  • 控制部署: 回滚更新或针对特定用户组。
  • 安全您的应用: 使用加密保护更新。
  • 优化构建: 根据平台需求调整设置。

快速概览:关键功能

  • 配置文件: 使用 capacitor.config.json __CAPGO_KEEP_0__ package.json 管理构建设置。
  • 自定义脚本: 为自动化添加预构建和后构建任务。
  • 构建钩子: 在构建过程的特定阶段运行 code。
  • 环境变量: 使用 .env 文件。

Capgo,部署工具,通过 自动更新,版本跟踪和全局性能优化等功能,来增强此过程。继续阅读以了解如何设置和自定义您的构建脚本以实现最高效率。

介绍 Capacitor 配置

Capacitor 框架文档网站

Capacitor 默认构建过程

Capacitor 如何处理其默认构建过程是理解它的关键,如果您想自定义它,必须了解它。以下,我们将分解 Capacitor CLI 的构建过程及其关键配置文件。

标准构建步骤

Capacitor 使用逐步过程将您的 web 应用程序转换为平台特定的构建。以下是默认构建过程的详细信息:

阶段描述输出
Web 构建使用您的框架工具编译 web 资产优化的 web 包
复制资产将 web 资产移动到本机平台文件夹平台特定的资产目录
本机构建运行平台特定的构建命令可部署的二进制文件
验证检查构建完整性和依赖项构建状态和警告

主配置文件

Capacitor的两个关键配置文件决定了如何处理你的构建:

capacitor.config.json
Capacitor项目的核心配置文件。它设置了构建过程中的重要参数:

{
  "appId": "com.example.app",
  "appName": "MyApp",
  "webDir": "dist",
  "bundledWebRuntime": false,
  "plugins": {
    "SplashScreen": {
      "launchShowDuration": 3000
    }
  }
}
  • appId: 应用程序的唯一标识符。
  • appName: 应用程序的名称。
  • webDir: 指定Capacitor应该在哪里查找Web资产(例如 dist).
  • plugins: 允许您配置插件特定的设置,例如SplashScreen选项。

package.json
此文件包含影响构建过程的构建脚本和依赖项:

{
  "scripts": {
    "build": "npm run build:web && cap sync",
    "build:web": "vite build",
    "cap:build": "cap build"
  }
}
  • webDir 设置 capacitor.config.json 告诉 Capacitor 在哪里找到您的编译 Web 资产,以便在原生构建中包含它们。
  • 修改后, capacitor.config.json您需要运行 cap sync 以确保您的原生项目得到更新。

接下来,我们将探索如何修改这些设置以进一步定制您的构建。

修改构建脚本

您可以调整 Capacitor 的默认构建过程以更好地适应您的项目需求。以下是如何做到的:

配置文件设置

您可以通过编辑 capacitor.config.json 文件来调整构建过程。以下是示例配置:

{
  "appId": "com.example.app",
  "webDir": "www",
  "server": {
    "hostname": "localhost",
    "androidScheme": "https",
    "iosScheme": "https",
    "allowNavigation": ["*.example.com"]
  },
  "android": {
    "buildOptions": {
      "keystorePath": "release.keystore",
      "keystorePassword": "mypassword",
      "keystoreAlias": "release",
      "keystoreAliasPassword": "mypassword"
    }
  },
  "ios": {
    "scheme": "App",
    "automaticProvisioning": true
  }
}

以下是您可以修改的关键设置:

  • webDir: 指定您的编译 Web 资产的位置。
  • server: 配置开发服务器,包括主机名和导航权限。
  • android/ios: 允许平台特定的构建设置,例如 Android 的.keystore 详情或 iOS 的分发选项。

创建 NPM 脚本

为了简化您的工作流程,添加自定义 NPM 脚本到您的 package.json 文件中。以下是一个示例:

{
  "scripts": {
    "prebuild": "node ./scripts/prepare-env.js",
    "build": "npm run build:web && cap sync",
    "build:web": "vite build",
    "build:ios": "cap build ios --release",
    "build:android": "cap build android --release",
    "postbuild": "node ./scripts/notify-completion.js"
  }
}
  • prebuildpostbuild: 使用这些命令来执行任务,如设置环境或在构建完成时发送通知。
  • build:platform: 平台特定的命令用于构建 Android 或 iOS 应用。

您可以通过添加构建钩子来进一步自动化。构建钩子设置

为了获得更高级别的控制,使用构建钩子来执行自定义 __CAPGO_KEEP_0__ 在构建过程中的特定点。以下是一个示例设置在

For more advanced control, use build hooks to execute custom code at specific points during the build process. Here’s an example setup in capacitor.config.ts:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.app',
  plugins: {
    CapacitorHooks: {
      beforeBuild: async () => {
        console.log('Running pre-build tasks...');
        // Add your pre-build tasks here
      },
      afterBuild: async () => {
        console.log('Running post-build tasks...');
        // Add your post-build tasks here
      }
    }
  }
};

export default config;

Build Hooks Setup

  • 在构建开始之前验证需求
  • 在构建过程中转换资产
  • 在关键点触发通知
  • 自动更新版本号
  • 无缝运行自动化测试

这种方法为您提供了更大的灵活性和对整个构建生命周期的控制权。

高级构建定制

在处理更大的项目时,精细调整您的构建过程确实会带来很大的不同。这里是如何有效地处理环境特定的构建和平台定制的。

环境变量

通过为每个环境创建单独的文件来设置环境变量: .env 然后,配置您的构建脚本以根据环境加载适当的文件:

  • .env.development
  • .env.staging
  • .env.production

在构建过程中,

import { defineConfig } from '@capacitor/cli';

export default defineConfig({
  ios: {
    buildConfig: {
      environment: process.env.BUILD_ENV || 'development',
      configurations: {
        development: {
          signing: {
            debug: true,
            automaticProvisioning: true
          }
        },
        production: {
          signing: {
            release: true,
            provisioningProfile: 'dist/profile.mobileprovision'
          }
        }
      }
    }
  }
});

您可以进一步调整这些设置以匹配平台特定的要求。

平台特定构建

要为 Android 和 iOS 自定义构建,请使用以下结构:

const platformConfig = {
  android: {
    buildType: process.env.BUILD_TYPE || 'debug',
    keystoreConfig: {
      path: process.env.KEYSTORE_PATH,
      password: process.env.KEYSTORE_PASSWORD,
      alias: process.env.KEYSTORE_ALIAS
    }
  },
  ios: {
    scheme: process.env.APP_SCHEME || 'App',
    xcodePreferences: {
      automaticSigning: false,
      developmentTeam: process.env.DEVELOPMENT_TEAM
    }
  }
};

这些配置允许您为每个平台定制构建,从而实现更平滑的部署。

功能AndroidiOS
调试符号ProGuard 映射文件dSYM 文件
构建变体debug, release, stagingdebug, release
Code Signing密钥库管理分发配置文件
资源管理res/drawable 优化资源目录

优化构建的附加提示包括:

  • 使用部分更新来节省部署时间
  • 设置错误跟踪来快速识别问题
  • 创建渠道系统来测试beta版本
  • 启用端到端加密以实现安全分发

当与 Capgo 等分析和安全更新工具配对时,这些技术可以让您更好地控制部署过程 [1].

构建脚本问题与解决方案

在使用自定义构建配置时,快速解决错误对于保持构建过程顺畅至关重要

修复常见错误

许多构建脚本问题源于环境设置或依赖问题。以下是如何解决一些常见问题的方法

缺少环境变量

如果您遇到以下错误:

error: Cannot find environment configuration for BUILD_ENV

您可以通过在项目根目录中创建一个 .env.local 文件来解决它。以下是示例:

BUILD_ENV=development
CAPACITOR_PLATFORM=ios
BUILD_TYPE=debug

平台特定的构建失败

对于 Android 签名错误,请使用以下命令:

npx cap build android --keystorePassword=$KEYSTORE_PASSWORD --keystoreAlias=$KEYSTORE_ALIAS

iOS 配置文件问题?尝试以下方法:

npx cap build ios --configuration=release --type=development
错误类型常见原因解决方案
签名配置缺少.keystore 文件详细信息设置 KEYSTORE_PATH 和凭据
构建环境未定义的变量创建平台特定的 .env 文件
依赖项版本不匹配更新 package.json 并同步

修复后,请确保您的更改是稳固的,通过运行全面构建测试来验证。

测试构建脚本

一旦错误得到解决,使用以下步骤验证您的构建脚本:

  • 自动验证: 运行关键命令以确认构建过程如预期工作。
npm run build
npx cap sync
npx cap copy
  • 环境验证: 在开始构建之前检查是否缺少环境变量。
const requiredVars = ['BUILD_ENV', 'KEYSTORE_PATH'];
requiredVars.forEach(varName => {
  if (!process.env[varName]) {
    throw new Error(`Missing required env var: ${varName}`);
  }
});
  • 构建脚本调试: 在构建过程中捕获潜在问题的详细脚本。
{
  "scripts": {
    "build:debug": "NODE_ENV=development npx cap build --verbose",
    "build:release": "NODE_ENV=production npx cap build --verbose"
  }
}

测试的额外提示:

  • 使用 Docker 容器来隔离构建。
  • 在开始过程之前验证配置文件。
  • 使用多个 Node.js 版本进行测试。
  • 确认满足平台特定的要求。
  • 关注构建性能以可能的改进。

Capgo Build Features

Capgo 实时更新控制台界面

Capgo 将构建脚本推向下一个层次,通过自动部署来提高效率并简化流程。

快速应用更新

Capgo 的更新性能令人印象深刻:

  • 95% 的活跃用户 在 24 小时内接收更新。
  • 82% 的成功率 全球更新交付率。
  • 全球平均 API 响应时间为 434ms.

该平台使用部分更新,这意味着只下载更改。这一方法减少了带宽使用量并加快了更新过程。另外,整个构建过程都是完全自动化的,节省了时间和精力。

自动化构建

Capgo 与主要的 CI/CD 平台无缝集成,提供多种集成选项:

CI/CD 平台集成功能好处
GitHub 动作自动化构建,部署触发器持续部署
GitLab CI管道自动化,版本控制流程化工作流
Jenkins自定义工作流程,构建钩子适合企业级

通常情况下,设置自动构建的成本约为 $300/月,远低于传统解决方案的 $6,000/年.

安全标准

Capgo

  • 优先考虑安全性,使用强大的框架,包括:
  • 端到端加密更新包
  • 安全密钥管理

遵守苹果和谷歌的指南

  • 快速回滚选项。
  • 部署版本跟踪。
  • 为阶段性发布配置更新频道管理。

此安全框架已在数百个企业应用程序中进行了严格的测试。对于需要额外安全性的团队,Capgo还提供了自主托管解决方案,具有可自定义的配置。

Capgo的频道系统使更新分发更加灵活。开发人员可以针对特定用户组使用不同的版本,适合beta测试或逐步发布。

概要

构建步骤概览

自定义构建脚本允许通过利用构建钩子、环境变量和平台特定命令来实现自动化和一致的部署。这些过程为通过Capgo实现的部署改进奠定了坚实的基础。

Capgo优势

Capgo简化了部署,已成功在750个生产应用程序中分发超过2,350万个更新。 [1]其部分更新系统减少了带宽使用量和部署时间。

该平台提供快速更新、全球性能优化、端到端加密安全以及灵活的基于频道的分发系统。这一设置支持目标更新、beta测试和遵守应用商店指南,同时保持强大的安全框架。

Capacitor 实时更新

当 web 层 bug 活跃时,通过 Capgo 将修复推送给用户,而不是等待几天的应用商店审批。用户在后台接收更新,而原生变化保持在正常的审批路径中。

立即开始

最新博客

Capgo 为您提供创建真正专业的移动应用所需的最佳见解。