使用构建缓存提供者

编辑

通过缓存和重用来自提供者的构建来加速本地开发。


构建缓存是一项通过远程缓存构建来加速 npx expo run:[android|ios] 的功能,基于项目的 fingerprint。当你运行 npx expo run:[android|ios] 时,它会检查是否存在具有匹配指纹的构建,然后下载并启动它,而不是再次编译。否则,项目会像往常一样编译,然后生成的二进制文件会上传到远程缓存,以供将来运行使用。

使用 EAS 作为构建提供者

要使用 EAS Build 提供者插件,首先安装 eas-build-cache-provider 包作为开发依赖:

Terminal
npx expo install eas-build-cache-provider

然后,更新你的 app.json 以包含 buildCacheProvider 属性及其提供者:

app.json
{ "expo": { "buildCacheProvider": "eas" %%placeholder-start%%... %%placeholder-end%% } }

你可以通过导出一个实现以下方法的插件来创建自己的缓存提供者:

type BuildCacheProviderPlugin<T = any> = { /** * 尝试获取现有的构建。如果缺失,返回其 URL 或 null。 */ resolveBuildCache(props: ResolveBuildCacheProps, options: T): Promise<string | null>; /** * 上传新的构建二进制文件。如果失败,返回其 URL 或 null。 */ uploadBuildCache(props: UploadBuildCacheProps, options: T): Promise<string | null>; /** * (可选)自定义指纹哈希算法。 */ calculateFingerprintHash?: ( props: CalculateFingerprintHashProps, options: T ) => Promise<string | null>; }; type ResolveBuildCacheProps = { projectRoot: string; platform: 'android' | 'ios'; runOptions: RunOptions; fingerprintHash: string; }; type UploadBuildCacheProps = { projectRoot: string; buildPath: string; runOptions: RunOptions; fingerprintHash: string; platform: 'android' | 'ios'; }; type CalculateFingerprintHashProps = { projectRoot: string; platform: 'android' | 'ios'; runOptions: RunOptions; };

使用 GitHub Releases 缓存构建的参考实现可以在 Build Cache Provider Example 中找到。

创建自定义构建提供者

首先创建一个 provider 目录以编写 TypeScript 的提供者插件,并在项目根目录中添加一个 provider.plugin.js 文件,这将是插件的入口点。

1

创建一个 provider/tsconfig.json 文件

provider/tsconfig.json
{ "extends": "expo-module-scripts/tsconfig.plugin", "compilerOptions": { "outDir": "build", "rootDir": "src" }, "include": ["./src"], "exclude": ["**/__mocks__/*", "**/__tests__/*"] }

2

为你的插件创建一个 provider/src/index.ts 文件

provider/src/index.ts
import { BuildCacheProviderPlugin } from '@expo/config'; const plugin: BuildCacheProviderPlugin { resolveBuildCache: () => { console.log('Searching for remote builds...') return null; }, uploadBuildCache: () => { console.log('Uploading build to remote...') return null; },, }; export default plugin;

3

在根目录中创建一个 provider.plugin.js 文件

provider.plugin.js
// 此文件配置插件的入口文件。 module.exports = require('./provider/build');

4

构建你的提供者插件

在你的项目根目录中运行 npm run build provider 以启动 TypeScript 编译器的监视模式。

5

通过将以下行添加到 example/app.json 文件中,将你的示例项目配置为使用你的插件:

example/app.json
{ "expo": { %%placeholder-start%%... %%placeholder-end%% "buildCacheProvider": { "plugin": "./provider.plugin.js" } } }

6

测试你的提供者

当你在 example 目录中运行 npx expo run 命令时,你应该在日志中看到插件的控制台语句。

Terminal
cd example
npx expo run:ios

就这样!你现在有一个远程构建缓存提供者来加速构建。

传递自定义选项

要向你的插件注入自定义选项,可以使用 options 字段,它将作为自定义函数的第二个参数传递。为此,请按下面所示修改 example/app.json 中的 buildCacheProvider 字段:

example/app.json
{ "expo": { %%placeholder-start%%... %%placeholder-end%% "buildCacheProvider": { "plugin": "./provider.plugin.js", "options": { "myCustomKey": "XXX-XXX-XXX" } } } }