Середовище Expo — перший запуск
Середовище Expo — перший запуск
git clone https://github.com/arakviel/nomad.git). Кожен коміт у тому репо відповідає статті (Material: … у тілі коміту). У monorepo kostyl.dev лише матеріали курсу (markdown); код застосунку — у репозиторії Nomad вище.Навіщо ця стаття
Попередні матеріали відповіли на питання навіщо React Native, як він приблизно влаштований усередині, і якою майстернею (Expo) курс починає роботу. Тут з’являються руки в терміналі: з’являється реальний проєкт на диску, запускається збирач, на екрані телефону або симулятора видно перший інтерфейс.
Після цієї статті має бути зрозуміло:
- що встановити на комп’ютер мінімально;
- як створити проєкт командою create-expo-app;
- що відбувається після
npx expo start; - чим Expo Go відрізняється від симулятора й від «повноцінної» збірки для магазину;
- де лежать перші налаштування імені застосунку;
- як виконати міні-проєкт «Привіт, світе» і покласти фундамент Nomad.
Що саме буде встановлено (картина цілого)
Коротко по ролях:
npx, установлюються залежності проєкту. Для курсу потрібна актуальна LTS-версія (Long-Term Support — «з довгою підтримкою», стабільна лінійка для роботи).package.json завантажує бібліотеки в папку node_modules. З Node.js зазвичай іде npm. Якщо в команді вже прийнятий pnpm або yarn — ними теж можна користуватися; у прикладах нижче показані варіанти.npx expo start, щоб узяти версію, узгоджену з проєктом.Крок 0. Перевірка та встановлення Node.js
Навіщо
Без Node.js команди створення проєкту й установки пакетів не запустяться. Node.js — це середовище, яке виконує JavaScript на комп’ютері (у терміналі), а не в браузері. Через нього працюють npx, установники пакетів і багато інструментів екосистеми React / Expo.
Разом із Node.js зазвичай з’являється npm (Node Package Manager — програма для встановлення бібліотек за списком у package.json).
Як перевірити, чи вже встановлено
У новому вікні терміналу:
node -v
npm -v
v22.x.x і 10.x.x (цифри змінюються з часом). Для курсу потрібна актуальна LTS-лінійка Node (Long-Term Support — довгопідтримувана стабільна гілка). Актуальний номер LTS дивіться на nodejs.org.create-expo-app і сучасний Expo SDK можуть відмовитися працювати. Потрібно оновити Node до поточного LTS (найзручніше — через менеджер версій, див. нижче).node реально викликається в терміналі (which node / where.exe node на Windows).Два підходи: «просто поставити» і «керувати версіями»
Підходить, якщо на машині один навчальний/робочий стек і не треба стрибати між проєктами з різними вимогами до Node.
Приклади: установщик з nodejs.org, Homebrew (brew install node), winget / Chocolatey / Scoop на Windows, пакети дистрибутива на Linux.
Підходить, якщо паралельно живуть старі й нові проєкти, або команда фіксує версію Node у файлі (.nvmrc, .node-version, mise.toml тощо).
Приклади: nvm, fnm, nvm-windows, mise, asdf, volta. Можна швидко перемкнути node -v без переустановки «з нуля».
Нижче — детальні рецепти. Команди інколи змінюються в нових версіях інструментів; якщо щось не збігається, орієнтуйтеся на офіційну документацію відповідного інструменту, але логіка лишається тією самою.
Спосіб A. Офіційний установщик (будь-яка ОС)
- Відкрити https://nodejs.org.
- Завантажити кнопку LTS (не обов’язково «Current», якщо потрібна максимальна стабільність для навчання).
- Пройти майстер установки (на Windows залишити опції за замовчуванням, зокрема додавання до PATH).
- Повністю закрити термінал / VS Code і відкрити знову.
- Перевірити
node -vіnpm -v.
Це найпростіший шлях, якщо немає звички до пакетних менеджерів ОС.
Спосіб B. macOS — Homebrew
Homebrew (brew) — популярний менеджер пакетів для macOS (іноді використовують і на Linux).
Якщо brew ще немає, його ставлять з офіційного сайту https://brew.sh (одна команда з сайту в терміналі). Далі:
brew update
brew install node
node -v
npm -v
Оновлення пізніше:
brew upgrade node
brew install node ставить одну «поточну» формулу Node від Homebrew. Якщо потрібні кілька версій під різні проєкти — зручніше nvm, fnm або mise (розділи нижче), а не кілька суперечливих установок brew + nvm без розуміння PATH.Перевірити, звідки взявся node:
which node
Спосіб C. Windows — winget, Chocolatey, Scoop
На Windows часто користуються менеджерами пакетів, щоб ставити програми з терміналу. Достатньо одного з них (або офіційного .msi з nodejs.org).
winget — менеджер пакетів від Microsoft, часто вже є в сучасних Windows 10/11.
winget install OpenJS.NodeJS.LTS
Після установки відкрити новий Windows Terminal / PowerShell:
node -v
npm -v
Якщо пакет не знайдено, пошук:
winget search nodejs
Обрати саме LTS-ідентифікатор пакета зі списку (назви пакетів інколи оновлюють).
Chocolatey (choco) — сторонній менеджер пакетів для Windows. Потрібне попереднє встановлення Chocolatey з https://chocolatey.org (зазвичай PowerShell від імені адміністратора).
choco install nodejs-lts -y
Новий термінал, потім node -v.
Оновлення:
choco upgrade nodejs-lts -y
Scoop — менеджер пакетів для Windows, орієнтований на встановлення «в профіль користувача» без постійного UAC. Спочатку ставлять Scoop з https://scoop.sh, далі:
scoop install nodejs-lts
node -v
npm -v
Оновлення:
scoop update nodejs-lts
.msi + Node з Scoop + Node з nvm-windows. Якщо node -v показує «не ту» версію, перевірте порядок PATH: where.exe node у PowerShell покаже усі знайдені node.exe у порядку пріоритету.Спосіб D. Linux — залежно від дистрибутива
На Linux «поставити node з репозиторію дистрибутива» інколи дає застарілу версію (особливо на LTS-релізах Ubuntu/Debian, якщо не підключено актуальне джерело). Для навчання й Expo надійніше:
- або менеджер версій (nvm / fnm / mise) — рекомендовано;
- або офіційні інструкції NodeSource / пакети з nodejs.org;
- або пакети дистрибутива — лише якщо версія достатньо нова (перевірити
node -vпісля установки).
Перевірка, що дає репозиторій «з коробки»:
sudo apt update
apt-cache policy nodejs
Якщо версія застаріла для сучасного Expo — не фіксуйтесь на sudo apt install nodejs як на єдиному шляху. Краще nvm/fnm/mise (нижче) або актуальні інструкції з офіційної документації Node / NodeSource для вашої версії Ubuntu.
Мінімальний варіант «з репо» (лише якщо версія підходить):
sudo apt update
sudo apt install -y nodejs npm
node -v
npm -v
На деяких системах пакет nodejs ставить лише node без свіжого npm — тоді дивіться документацію дистрибутива.
sudo dnf install nodejs npm
node -v
npm -v
Якщо версія застаріла — знову ж таки nvm / fnm / mise або офіційні бінарники.
sudo pacman -S nodejs npm
node -v
У Arch пакети зазвичай свіжі; для кількох версій Node усе одно зручний mise/nvm/fnm.
sudo zypper install nodejs npm
node -v
source конфіг (~/.bashrc, ~/.zshrc), інакше node «не знайдеться», хоча файли вже на диску.Спосіб E. Менеджери версій лише для Node: nvm і подібні
Ідея: на диску лежать кілька версій Node; команда на кшталт nvm use 22 перемикає активну. У каталозі проєкту часто тримають файл .nvmrc з номером версії, щоб усі в команді працювали однаково.
nvm (Node Version Manager) — macOS / Linux / WSL
nvm не підтримує «рідний» Windows напряму; на Windows або WSL (Linux-підсистема), або nvm-windows (окремий проєкт нижче).
Встановлення nvm — за офіційною інструкцією (скрипт install.sh). Після цього в zsh/bash:
# підтягнути nvm у поточну сесію (після свіжої установки)
# зазвичай рядок уже додається в ~/.bashrc або ~/.zshrc
nvm install --lts
nvm use --lts
node -v
npm -v
Корисні команди:
nvm ls # що встановлено локально
nvm ls-remote --lts # які LTS доступні
nvm install 22 # конкретна major-версія (приклад)
nvm alias default 22 # версія за замовчуванням для нових терміналів
Файл у корені проєкту:
.nvmrc
Вміст — один рядок, наприклад:
22
Тоді в каталозі проєкту:
nvm use
fnm (Fast Node Manager) — macOS / Linux / Windows
fnm — швидша сучасна альтернатива nvm, кросплатформена. Встановлення — з репозиторію fnm (brew, winget, скрипт тощо). Після ініціалізації в shell:
fnm install --lts
fnm use lts-latest
node -v
Підтримка .node-version / .nvmrc залежить від налаштування; digуйтесь README fnm.
nvm-windows — «класика» на Windows без WSL
Окремий проєкт nvm-windows (не той самий код, що nvm-sh). Зазвичай:
- За потреби прибрати попередній Node з «Програм і компонентів», щоб не дублювати PATH.
- Установити nvm-windows з релізів GitHub проєкту.
- У новому cmd/PowerShell:
nvm install lts
nvm use lts
node -v
(Точний синтаксис lts / номера версії перевірте в README вашої версії nvm-windows — він інколи відрізняється від unix-nvm.)
Спосіб F. Універсальні менеджери середовищ: mise, asdf, volta
Окрім «тільки Node», існують інструменти, які керують багатьма мовами й утилітами (Node, Python, Terraform, jq…). Це зручно, якщо вже так налаштований робочий ноутбук.
mise
mise (раніше часто згадували як rtx) — сучасний менеджер версій і середовищ. Одна конфігурація може задавати Node для проєкту.
Встановлення — з офіційної документації mise (є варіанти для macOS, Linux, Windows). Типовий сценарій після установки:
# увімкнути активацію в shell (команда з docs mise для bash/zsh/fish)
# далі:
mise use --global node@lts
node -v
npm -v
У каталозі проєкту:
mise use node@22
З’явиться файл на кшталт mise.toml (або використовуються вже існуючі .node-version / .nvmrc — залежить від конфігурації). Команда mise install поставить потрібні версії.
asdf
asdf — старший універсальний менеджер плагінів (asdf plugin add nodejs, потім asdf install nodejs <version>). Логіка та сама: версія на проєкт у .tool-versions. Синтаксис і плагіни — у документації asdf. На нових машинах часто обирають mise як швидший/простіший наступник за відчуттями, але asdf лишається поширеним у командах.
volta
Volta — менеджер інструментів JS-екосистеми: вміє фіксувати версію Node для проєкту і підхоплювати її автоматично. Встановлення — з https://volta.sh. Ідея:
volta install node@lts
volta pin node@22
volta pin записує версію в package.json, щоб інші з Volta отримали ту саму.
Коротке порівняння «менеджерів»
| Інструмент | Платформи (типово) | Що керує | Добре для |
|---|---|---|---|
| nvm | macOS, Linux, WSL | переважно Node | Класика в туторіалах |
| fnm | macOS, Linux, Windows | Node | Швидкість, кросплатформа |
| nvm-windows | Windows | Node | Windows без WSL |
| mise | macOS, Linux, Windows | Node + багато іншого | Єдине середовище для різних стеків |
| asdf | macOS, Linux | Плагіни (Node тощо) | Legacy-налаштування команд |
| volta | macOS, Linux, Windows | Node / npm / yarn / пакети JS | Жорстка фіксація під JS-проєкт |
Після будь-якого способу: фінальна перевірка
node -v
npm -v
which node
# Windows PowerShell:
# where.exe node
Бажано:
- Версія Node — з поточної LTS-лінійки (або тієї, яку явно вимагає обраний Expo SDK у документації).
which/whereвказує на очікуваний шлях (nvm, mise, brew, Program Files тощо) — не на випадковий старий бінарник.- Новий термінал після зміни PATH / профілю shell.
- Виконати
which node/where.exe node— подивитися перший шлях у списку. - Згадати, що ставили останнім: brew, .msi, nvm, mise…
- Закрити всі термінали й VS Code (інколи IDE кешує старий PATH).
- Перевірити кінець
~/.zshrc/~/.bashrc/ профіль PowerShell: чи немає двох ініціалізацій nvm і mise, що перебивають одна одну. - Тимчасово прибрати з PATH зайві каталоги Node або деінсталювати дублікат.
npm. Менеджер версій — плюс, не обов’язок у перший вечір, але саме він рятує через пів року, коли один проєкт «хоче» Node 18, а інший — 22.Крок 0+. Редактор коду: Visual Studio Code
Підійде будь-який редактор із підсвіткою TypeScript. У курсі орієнтир — Visual Studio Code (VS Code): безкоштовний редактор від Microsoft, стандарт де-факто для React / TypeScript / Expo. Сумісні форки (Cursor, VSCodium тощо) зазвичай розуміють ті самі розширення й settings.json; нижче — ідентифікатори й налаштування саме в термінах VS Code.
Офіційна документація VS Code: https://code.visualstudio.com/docs. Рекомендації щодо Expo Tools і дебагу з VS Code — у документації Expo.
settings.json нижче не блокують перший запуск, але сильно зменшують кількість дурних помилок і хаосу у форматуванні вже з другого дня.Встановлення VS Code
- Завантажити з https://code.visualstudio.com для macOS / Windows / Linux.
- Установити як звичайну програму.
- (Бажано) увімкнути команду
codeу PATH:- macOS: у VS Code — Command Palette (
Cmd+Shift+P) → Shell Command: Install 'code' command in PATH. - Windows: опція під час установки «Add to PATH» зазвичай уже є.
- macOS: у VS Code — Command Palette (
- Відкрити папку проєкту (не один файл): File → Open Folder… — тоді працюють workspace-налаштування й TypeScript проєкту.
Вбудований термінал: Ctrl+` (Windows/Linux) або Ctrl+` / Terminal → New Terminal (macOS — Control+`). Завжди запускайте npx expo start з кореня відкритої папки проєкту.
Два рівні налаштувань: User і Workspace
formatOnSave, розмір табів, тему, «дефолтний» форматер..vscode/settings.jsonу корені репозиторію. Перебиває user-налаштування для цієї папки. Сюди кладуть те, що має бути однаковим у команди (форматер, ESLint working directories)..vscode/extensions.json зі списком recommendations. Коли колега відкриває репо, VS Code пропонує встановити ці розширення (документація VS Code — Workspace Recommended Extensions)..vscode/settings.json проєкту, щоб не залежати від чужого user-профілю.Розширення: must-have
Це набір, без якого щоденна робота з Expo + TypeScript + якістю коду відчутно гірша. У таблиці — ідентифікатор для Marketplace / code --install-extension.
| Розширення | ID | Навіщо |
|---|---|---|
| ESLint | dbaeumer.vscode-eslint | Підсвічує порушення правил лінтера прямо в редакторі; уміє автовиправлення при збереженні (source.fixAll.eslint). Стандарт для JS/TS-проєктів (VS Code + ESLint). |
| Prettier — Code formatter | esbenp.prettier-vscode | Єдиний стиль відступів, лапок, переносів. Працює як default formatter для TS/TSX/JSON. |
| Expo Tools | expo.vscode-expo-tools | Офіційне розширення екосистеми Expo: підказки й перевірка для app.json / app.config.*, EAS-конфігів, зручності з конфіг-плагінами; інтеграція з дебагом у VS Code (документація Expo — Expo Tools / debugging). |
Встановлення з терміналу (приклад):
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension expo.vscode-expo-tools
Або в UI: бічна панель Extensions (Ctrl+Shift+X / Cmd+Shift+X) → пошук за назвою → Install.
eslint, prettier, .eslintrc / eslint.config.js, .prettierrc тощо). У свіжому create-expo-app набір може відрізнятися за шаблоном: якщо лінтера ще немає — розширення просто «чекатиме»; підключення ESLint до Nomad можна зробити на кроці структури проєкту. Expo Tools корисний одразу для app.json.editor.defaultFormatter. Типовий конфлікт: і вбудований TypeScript formatter, і Prettier, і «Format Document» від іншого плагіна — файл стрибає між стилями.Розширення: рекомендовані (не обов’язкові)
Ставте за смаком і задачами. Для курсу вони корисні, але без них можна жити.
Error Lens
usernamehw.errorlensПоказує текст помилки TypeScript/ESLint в кінці рядка, не лише хвилясте підкреслення. Зручно, поки звикаєте читати Problems panel.
Pretty TypeScript Errors
yoavbls.pretty-ts-errorsРобить довгі generics-помилки TypeScript читабельнішими.
EditorConfig
editorconfig.editorconfigПідхоплює файл
.editorconfig у репо (кодування, кінці рядків, відступи), щоб Windows/macOS/Linux не плодили різний whitespace.Path Intellisense
christian-kohler.path-intellisenseАвтодоповнення шляхів у
import і в рядках до файлів.npm Intellisense
christian-kohler.npm-intellisenseПідказки імен пакетів з
node_modules у import.GitLens
eamodio.gitlensХто й коли змінював рядок (blame), історія hunks. Зручно в команді; для соло-навчання — за бажанням.
DotENV
mikestead.dotenvПідсвітка
.env файлів (коли з’являться ключі API — ніколи не комітьти секрети).YAML
redhat.vscode-yamlЯкщо редагуєте YAML (CI, EAS-конфіги в yaml). Для чистого JSON
app.json не критично.Опційно / обережно:
| Розширення | Коментар |
|---|---|
React Native Tools (msjsdiag.vscode-react-native) | Корисне для деяких bare/CLI сценаріїв і дебагу. У Expo-first курсі пріоритет — Expo Tools; два набори інструментів дебагу інколи плутають — ставте свідомо. |
| Radon IDE | Потужне платне середовище під RN/Expo (згадується в docs Expo як альтернатива). Не must-have для навчання. |
| Іконки тем (Material Icon Theme тощо) | Лише зовнішній вигляд файлового дерева. |
| AI-плагіни (Copilot тощо) | За політикою навчання/роботи; до React Native не прив’язані. |
Рекомендований settings.json (User або Workspace)
Нижче — практичний стартовий набір для TypeScript + Prettier + ESLint, узгоджений із поширеними порадами документації VS Code (editor.formatOnSave, editor.codeActionsOnSave, мовні перевизначення форматера).
Відкрити User JSON: Command Palette → Preferences: Open User Settings (JSON).
{
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.detectIndentation": false,
"editor.wordWrap": "on",
"editor.minimap.enabled": false,
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"editor.linkedEditing": true,
"editor.suggestSelection": "first",
"editor.inlineSuggest.enabled": true,
"files.eol": "\n",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"files.exclude": {
"**/.git": true,
"**/node_modules": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/.expo": true
},
"editor.formatOnSave": true,
"editor.formatOnPaste": false,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"typescript.tsserver.maxTsServerMemory": 4096,
"typescript.updateImportsOnFileMove.enabled": "always",
"javascript.updateImportsOnFileMove.enabled": "always",
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"eslint.format.enable": false,
"prettier.requireConfig": false,
"prettier.useEditorConfig": true,
"terminal.integrated.defaultProfile.osx": "zsh",
"terminal.integrated.scrollback": 10000,
"git.autofetch": true,
"diffEditor.ignoreTrimWhitespace": false
}
esbenp.prettier-vscode)."explicit" — сучасний варіант у VS Code: fix при явному save (не в «тихих» автосейвах у фоні). Якщо у вашій версії VS Code очікується boolean, можна поставити true (як у класичних прикладах docs: "source.fixAll.eslint": true).never; увімкнути true / "explicit" можна, коли в проєкті узгоджено одну стратегію імпортів.false — Prettier працює навіть без .prettierrc (з дефолтами). true — форматувати лише коли в проєкті є конфіг; зручно в монорепо з різними пакетами. Для навчання часто зручніше false або свідомий .prettierrc у Nomad..expo — службовий кеш локальної розробки; її рідко потрібно шукати повнотекстом.src/features/….{
"editor.tabSize": 2,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"files.eol": "\n",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true
}
Файли в репозиторії Nomad (workspace)
Після створення проєкту можна додати (вручну або командою Extensions: Configure Workspace Recommended Extensions):
node_modules), а не лише на вбудований у редактор. Версії compilerOptions і підказки збігаються з тим, що реально збирає Expo."mode": "auto" допомагає ESLint-розширенню знайти корінь конфігу, якщо структура папок складніша. Для простого Nomad часто працює і без цього.Корисні команди VS Code саме для цього курсу
| Дія | Command Palette / скорочення |
|---|---|
| Відкрити settings.json | Preferences: Open User Settings (JSON) |
| Форматувати документ | Format Document (Shift+Alt+F / Shift+Option+F) |
| Problems (помилки TS/ESLint) | View: Toggle Problems (Ctrl+Shift+M / Cmd+Shift+M) |
| Перейти до визначення | F12 / Go to Definition |
| Імпорти / рефакторинг символу | F2 Rename Symbol |
| Expo: дебаг (коли застосунок запущено) | команди на кшталт Expo: Debug … з розширення Expo Tools (див. актуальне меню Commands після установки) |
| Показати рекомендовані розширення workspace | Extensions: Show Recommended Extensions |
Швидкий чеклист редактора
- VS Code встановлено, папка проєкту відкрита через Open Folder
- Вбудований термінал відкривається в корені проєкту
- Must-have: ESLint, Prettier, Expo Tools
- У
settings.jsonєformatOnSave+ default formatter Prettier - (Опційно)
.vscode/extensions.jsonу Nomad для команди - Після
node_modules—typescript.tsdkна проєктний TypeScript
Крок 1. Створення проєкту
Куди класти папку
Код Nomad — окремий репозиторій (не всередині monorepo матеріалів):
- https://github.com/arakviel/nomad — наскрізний застосунок курсу Nomad;
hello-expo(локально, за бажанням) — міні-проєкт «Привіт, світе» цієї статті, окремо від Nomad;- пізніше: окрема пісочниця nomad-bare для React Native CLI (окремий модуль).
Команди для застосунку виконують у клоні https://github.com/arakviel/nomad.
Важливо: не створювати проєкт усередині іншої випадкової node_modules і бажано уникати шляхів із пробілами й кирилицею, якщо ОС інколи з цим «капризує» (рідко, але трапляється на Windows).
Команда створення
Офіційний сучасний спосіб:
npx create-expo-app@latest hello-expo
pnpm create expo-app hello-expo
yarn create expo-app hello-expo
Що відбувається під час виконання (спрощено):
Завантажується актуальний create-expo-app
Префікс @latest просить свіжу версію генератора, щоб не чіплятися за застарілий кеш.
Створюється папка hello-expo
У ній з’являються стартові файли й package.json — список залежностей і скриптів.
Установлюються залежності
Завантажуються React, React Native, Expo SDK та інші пакети шаблону. Це може зайняти кілька хвилин залежно від мережі.
Який шаблон обрати
create-expo-app уміє різні шаблони (templates — заготовки проєкту).
| Шаблон (орієнтир назв) | Зміст | Коли доречно |
|---|---|---|
| default (часто без прапорця) | TypeScript + багатоекранний старт на Expo Router (файлова навігація) | Основний шлях Nomad і більшість сучасних застосунків |
| blank-typescript | Мінімум файлів, TypeScript | Дуже маленький експеримент «один екран» |
| blank | Мінімум, без TypeScript | У курсі не використовуємо: потрібен TypeScript |
Приклад з явним шаблоном:
npx create-expo-app@latest hello-expo --template blank-typescript
blank-typescript — головне запустити і змінити видимий текст/іконку.create-expo-app@latest може поставити, наприклад, SDK 57, тоді як Expo Go з магазину ще зібраний під SDK 54. Тоді з’являється: Project is incompatible with this version of Expo Go.Що робити (оберіть одне):- Рекомендовано для курсу — тримати проєкт на SDK, який підтримує store Expo Go (референс Nomad: SDK 54):
npx create-expo-app@latest nomad -t blank-typescript@sdk-54
- Або встановити Expo Go саме під ваш SDK з expo.dev/go (APK для Android; на фізичному iPhone з магазину часто лише остання збірка).
- Або перейти на development build (окрема тема курсу) — тоді store Expo Go не потрібен.
Після створення:
cd hello-expo
Крок 2. Що лежить у свіжому проєкті (перший погляд)
Точна структура залежить від шаблону й версії SDK. Нижче — ролі, а не догма «файл має називатися саме так».
expo, react, react-native. Скрипт на кшталт start зазвичай запускає Expo.app/. У blank-шаблоні може бути один кореневий файл на кшталт App.tsx. Це місце, де змінюють текст «привіт»..gitignore).Глибоку «архітектуру папок продукту» (features, shared, design tokens) розбирає наступна стаття. Зараз достатньо знайти файл, де написаний видимий текст стартового екрана.
Крок 3. Запуск Metro і меню розробника
У корені проєкту:
npx expo start
pnpm exec expo start
# або, якщо в package.json є script "start":
pnpm start
yarn expo start
# або yarn start — залежно від scripts
Що має з’явитися
- У терміналі стартує Metro (збирач з попередньої статті).
- Часто малюється QR-код.
- Показуються підказки клавіш: відкрити Android, iOS, web тощо (набір залежить від ОС і встановлених інструментів).
Це сервер розробки: комп’ютер віддає зібраний JavaScript телефону або симулятору.
Швидке оновлення екрана
Після зміни тексту в компоненті й збереження файлу інтерфейс на пристрої зазвичай оновлюється сам (механізм на кшталт Fast Refresh). Якщо ні — у меню розробника є перезавантаження; інколи допомагає повний перезапуск expo start.
Крок 4. Де дивитися застосунок
Є три поширені шляхи. Вони не взаємовиключні — зручно вміти хоча б один стабільно.
A. Фізичний телефон і Expo Go
Expo Go — безкоштовний застосунок з App Store / Google Play. Він уміє відкривати проєкт розробки з вашого комп’ютера (через QR-код або URL), не змушуючи одразу збирати повний установчий пакет «як для магазину».
Установіть Expo Go на телефон
З офіційного магазину додатків для вашої платформи.
Комп’ютер і телефон в одній мережі (типовий випадок)
Обидва в одній Wi‑Fi — найпростіший варіант. Корпоративні мережі інколи блокують доступ між пристроями; тоді знадобляться інші режими з’єднання (тунель) — див. розділ про типові проблеми.
Запустіть npx expo start на комп’ютері
У терміналі з’явиться QR-код.
Відскануйте QR-код
- Android: часто можна сканувати з Expo Go.
- iPhone: зручно сканувати камерою системи, яка пропонує відкрити в Expo Go (поведінка залежить від версій).
Дочекайтеся завантаження бандла
Перший раз довше: залежності й збірка. Далі — швидше.
B. Емулятор Android
Емулятор — програма на комп’ютері, яка імітує Android-телефон.
Потрібні:
- Android Studio (велике встановлення від Google).
- Через SDK Manager — платформа Android і Android Emulator.
- Створений віртуальний пристрій (AVD).
- Запущений емулятор, потім у проєкті — відкриття Android з меню Expo (часто клавіша
aу терміналі зexpo start, якщо середовище налаштоване).
C. Симулятор iOS (лише macOS)
Симулятор iOS входить до Xcode (середовище Apple). На Windows і Linux немає офіційного симулятора iPhone.
На Mac:
- Установити Xcode з App Store (велике завантаження).
- Запустити Xcode один раз, прийняти ліцензії, дочекатися додаткових компонентів.
- У проєкті з
expo startвідкрити iOS (часто клавішаi), якщо інструменти на місці.
create-expo-app → expo start → Expo Go на особистому телефоні в одній Wi‑Fi з ноутбуком.Крок 5. Мінімальні налаштування «паспорта» застосунку
Відкрийте app.json (або app.config.ts / app.config.js, якщо шаблон уже на конфігурації в коді).
Типові поля, які варто зрозуміти одразу:
hello-expo можна лишити близьким до імені папки.1.0.0). Пізніше пов’яжеться з магазинами.portrait — здебільшого вертикально тощо).Приклад фрагмента (у реальному файлі полів більше; не копіюйте сліпо, а знайдіть аналог у своєму шаблоні):
{
"expo": {
"name": "Hello Expo",
"slug": "hello-expo",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/images/icon.png",
"splash": {
"image": "./assets/images/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
}
}
expo start і повне перезавантаження на пристрої. Кеш зображень любить «триматися» за старе.Глибоке налаштування ідентифікаторів магазинів (ios.bundleIdentifier, android.package), adaptive icon, permissions — у статтях ближче до збірки. Зараз достатньо змінити name і підставити свої навчальні картинки, щоб побачити, що конфіг «живий».
Крок 6. Перша зміна в коді
- Знайдіть файл стартового екрана (
app/index.tsx,App.tsxтощо — залежить від шаблону). - Змініть будь-який видимий текст на зрозумілий, наприклад:
Привіт, Expo. - Збережіть файл.
- Переконайтеся, що на пристрої/симуляторі текст оновився.
Якщо використовуєте TypeScript (у курсі — так), синтаксис компонентів той самий React, але інші примітиви UI (View, Text замість div / span). Якщо шаблон уже містить імпорти з react-native — повторіть той самий стиль; детальний розбір компонентів — у модулі UI.
Text. У React Native рядки для користувача зазвичай кладуть у компонент Text. Якщо вставити «голий» рядок у контейнер як у div у вебі, з’явиться попередження або помилка. Стартовий шаблон уже показує правильний зразок — орієнтуйтеся на нього.Типові проблеми на старті
npx expo start --tunnel (за наявності потрібних залежностей) — робочий напрямок для діагностики.node_modules і lock-файл лише якщо розумієте наслідки; частіше спочатку npx expo start -c (старт з очищенням кешу Metro). Не змішуйте «випадкові» major-версії expo і react-native вручну — тримайтеся версій, які поставив шаблон / підкаже expo install.Міні-проєкт «від А до Я»: Hello Expo
Мета
Окремий маленький проєкт (не обов’язково фінальний Nomad), у якому:
- Створено застосунок через
create-expo-app. - Запущено Metro.
- UI видно хоча б на одному з: Expo Go / Android emulator / iOS simulator.
- Змінено видимий текст екрана.
- Змінено name у конфігу й (за бажанням) підкладено власні файли icon/splash з
assets.
Кроки
Створити проєкт
npx create-expo-app@latest hello-expo
cd hello-expo
(За потреби додайте --template blank-typescript.)
Запустити
npx expo start
Відкрити на телефоні або симуляторі.
Змінити текст
У стартовому екрані — рядок Привіт, Expo (або інший осмислений українською).
Змінити name у app.json / app.config
Наприклад, на Hello Expo UA.
Зафіксувати результат
Зробити скріншот екрана телефона/симулятора для себе (у репозиторій курсу класти не обов’язково). Коротко записати: який пристрій, яка ОС комп’ютера, чи знадобився tunnel.
Критерій «готово»
- Проєкт відкривається повторно наступного дня командою
npx expo startбез «магії». - Текст на екрані — ваш, не дефолтний з шаблону.
- Немає відчуття «єдиний раз якось завелось, як — незрозуміло».
-
node -vпоказує LTS-версію - Папка проєкту відкривається в редакторі
-
npx expo startпіднімає Metro без червоного екрана помилки - UI видно на пристрої або симуляторі
- Зміна тексту відображається після збереження (або після reload)
- Зрозуміло, де
app.json/app.config.*і де файл екрана
Nomad: ініціалізація навчального застосунку
Навіщо користувачу
Потрібен живий застосунок, який відкривається на телефоні — з нього далі ростиме щоденник подорожей. Без стабільного запуску наступні статті (структура, картки, теми, списки) нікуди чіпляти.
Нитка проєкту
Уже є: ідея курсу й рішення йти через Expo (попередні статті).
Додаємо в цій статті:
- Репозиторій Nomad: Expo + TypeScript.
- Стартові
app/,package.json,app.json(name/slug). - Перший коміт історії навчального застосунку.
Повний знімок проєкту після цієї статті
git clone / git pull. Нижче — весь проєкт (усі файли з кодом) після init, не «схема папок без вмісту».cd ~/Work # або інший зручний каталог
git clone https://github.com/arakviel/nomad.git
cd nomad
# за потреби відкотитись до init-коміту історії курсу — або одразу latest і читати статті далі
npm install
npx expo start
Перевірка
npx expo startвідкриває Metro без помилок.- Екран видно в Expo Go / симуляторі.
- У
app.json:name≈ Nomad,slug≈ nomad.
Коміт
cd /path/to/nomad
git add -A
git commit -m "$(cat <<'EOF'
feat: init expo app with typescript
Material: content/15.react-native/04.expo-setup-and-tooling.md
EOF
)"
git push
У публічному репо цей коміт уже є. Структура features / tokens / теми — наступні статті; тут лише стабільний каркас.
Що свідомо не робимо в цій статті
| Відкладено | Чому |
|---|---|
| EAS Build / Submit | Спочатку цикл розробки на Metro |
| React Native CLI init | Окремий модуль курсу |
| Повний ESLint/Prettier/CI | Після базової структури проєкту |
| Налаштування release-підписів | Розділ про магазини |
| Development build замість Expo Go | Коли з’являться модулі, несумісні з Go |
Підсумок
Node.js LTS — фундамент команд
Без нього немає npx і нормальної роботи з пакетами.
create-expo-app створює проєкт
Шаблон default зручний для Nomad (TS + Router).
expo start піднімає Metro
Зв’язок із телефоном (Expo Go) або симулятором/емулятором.
app.json — паспорт
Ім’я, іконка, splash; глибші поля — пізніше.
Перший успіх — замкнений цикл змін
Текст змінили → побачили на екрані.
Nomad ініціалізовано окремим проєктом
Далі — структура й UI-угоди.
Наступна стаття: структура production-подібного проєкту на Expo Router, design tokens і перші примітиви інтерфейсу для Nomad.
Практичні завдання
Базовий рівень
- Виконати міні-проєкт Hello Expo.
- Записати три файли/папки свіжого проєкту й одним реченням роль кожної.
- Пояснити різницю між Expo Go і застосунком, який потрапить у магазин (2–3 речення).
Середній рівень
- Ініціалізувати Nomad і зробити скрін/замітку про успішний старт.
- Навмисно «зламати» текст (синтаксична помилка) і прочитати повідомлення в терміналі/на червоному екрані — потім виправити. Коротко описати, де з’явилась діагностика.
- Запустити
npx expo start -cі своїми словами пояснити, навіщо інколи очищають кеш.
Професійний рівень
- Налаштувати два способи перегляду (наприклад, Expo Go + емулятор) і порівняти швидкість/зручність.
- Прочитати в офіційній документації Expo розділ про режими з’єднання (LAN / localhost / tunnel) і скласти шпаргалку на 5–7 рядків «коли який».
- Перевірити версії
expo,react,react-nativeуpackage.jsonі записати їх у нотатки курсу (для майбутнього pin SDK уindex.md).
Часті запитання
Expo і класичний React Native — два шляхи одного фреймворку
Зрозуміле порівняння Expo і React Native CLI — що це таке, чим відрізняються, і чому курс спочатку йде через Expo
Структура проєкту та перші UI-примітиви
Як організувати Expo-проєкт для зростання — папки app і src, design tokens, Screen, AppText, Button, платформні файли