使用构建缓存提供者
编辑
通过缓存和重用来自提供者的构建来加速本地开发。
构建缓存是一项通过远程缓存构建来加速 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
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
5
6
传递自定义选项
要向你的插件注入自定义选项,可以使用 options 字段,它将作为自定义函数的第二个参数传递。为此,请按下面所示修改 example/app.json 中的 buildCacheProvider 字段:
example/app.json
{ "expo": { %%placeholder-start%%... %%placeholder-end%% "buildCacheProvider": { "plugin": "./provider.plugin.js", "options": { "myCustomKey": "XXX-XXX-XXX" } } } }