Шаблон Expo
Шаблон устанавливает закреплённые версии Expo 57, React и React Native. Metro запускается без обращения к сети на порту 8081 и входит в готовое состояние песочницы.
mjs
import { Sandbox, Template, waitForURL } from "@abox-dev/sdk";
const templateName = process.env.TEMPLATE_NAME ?? "expo-app";
const template = Template({ fileContextPath: "." })
.fromNodeImage("24-bookworm-slim")
.setWorkdir("/home/user/app")
.copy("package.json", "/home/user/app/package.json")
.copy("App.js", "/home/user/app/App.js")
.runCmd("npm install")
.setEnvs({ CI: "1" })
.setStartCmd(
"npm run start -- --offline --port 8081",
waitForURL("http://localhost:8081"),
);
await Template.build(template, templateName, {
cpuCount: 2,
memoryMB: 2_048,
});
const sandbox = await Sandbox.create(templateName);
try {
const response = await sandbox.commands.run(
"curl --silent --head http://localhost:8081 | head -n 1",
);
console.log(response.stdout);
} finally {
await sandbox.kill();
}Положите package.json и App.js рядом с примером. Переменная CI задаётся на этапе сборки, потому что команда запуска выполняется именно в этот момент.
Этот шаблон готовит сервер Metro. Для Android, iOS или веб-приложения добавьте нужные зависимости и подключите соответствующий клиент Expo.