ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ³ΡΠ° Β«ΠΠΎΡΡΠΊΠΎΠΉ Π±ΠΎΠΉΒ» Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π½Π° React + TypeScript.
ΠΡΠΎΠ΅ΠΊΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ:
- ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ UI (Tailwind + SCSS),
- Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΠΈΠ³ΡΡ,
- Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π·Π²ΡΠΊΠΈ (Π±Π΅Π· CORS-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ),
- CI-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ (lint + test + build).
- Π Π΅ΠΆΠΈΠΌΡ:
Player vs AIAI vs AI
- ΠΠΊΡΠ°Π½ Π½Π°ΡΡΡΠΎΠ΅ΠΊ:
- ΠΈΠΌΡ ΠΈΠ³ΡΠΎΠΊΠ°,
- Π·Π°Π΄Π΅ΡΠΆΠΊΠ° AI,
- Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π²ΡΠΊΠ°.
- ΠΠ²ΡΠΊΠΎΠ²ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Π²ΡΡΡΡΠ΅Π»ΠΎΠ² ΠΈ ΠΏΠΎΠ±Π΅Π΄Ρ/ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΡ (Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅
.oggΠ² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ). - ΠΠ΄Π°ΠΏΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
- React 16
- TypeScript
- Webpack 4
- Tailwind CSS 3
- Sass
- Jest
- ESLint
- Node.js (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ LTS)
- npm
npm installnpm startΠΠΎΡΠ»Π΅ ΡΡΠ°ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ:
http://localhost:8080
npm run buildnpm run lint
npm testnpm startβ Π·Π°ΠΏΡΡΠΊ dev-ΡΠ΅ΡΠ²Π΅ΡΠ° webpacknpm run buildβ production-ΡΠ±ΠΎΡΠΊΠ°npm run lintβ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ESLintnpm testβ ΡΠ΅ΡΡΡ Jest + coverage
src/
actions/ # action creators
components/ # ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ UI-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
constants/ # ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ (Π²ΠΊΠ»ΡΡΠ°Ρ sounds.ts)
containers/ # ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ
ΡΠ΅ΠΆΠΈΠΌΠΎΠ²
pages/ # ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Main, Game, Settings)
reducers/ # ΠΈΠ³ΡΠΎΠ²Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° reducer-ΠΎΠ²
styles/ # ΠΎΠ±ΡΠΈΠ΅ SCSS-ΠΌΠΎΠ΄ΡΠ»ΠΈ
utils/ # ΡΡΠΈΠ»ΠΈΡΡ, AI, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
assets/sound/ # Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π·Π²ΡΠΊΠΈ .ogg
ΠΠ²ΡΠΊΠΈ Π»Π΅ΠΆΠ°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π²:
src/assets/sound/*.ogg
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ½ΠΈ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ Π²:
dist/sound/*.ogg
ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ CORS ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π°ΡΠ΄ΠΈΠΎ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ PUBLIC_PATH ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΡΡ (ΡΠΌ. src/constants/url.ts).
ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ GitHub Pages/ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²:
- Π² CI Π²ΡΡΡΠ°Π²Π»Π΅Π½
PUBLIC_PATH=/seawars/.
Workflow: .github/workflows/ci.yml
Pipeline:
npm cinpm run lintnpm test -- --watchman=falsenpm run build- ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
dist/index.htmlΠ²dist/404.htmlΠ΄Π»Ρ SPA fallback
ΠΡΠ»ΠΈ CI ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π°:
npm ci can only install packages when your package.json and package-lock.json are in sync
Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅:
npm installΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ CI (npm 10), ΠΌΠΎΠΆΠ½ΠΎ:
npx npm@10 install --package-lock-only
npx npm@10 ciΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΡΠΉ package-lock.json.


