Skip to content

ylabio/react-skeleton

Repository files navigation

React Skeleton

ΠšΠ°Ρ€ΠΊΠ°Ρ прилоТСния Π½Π° React & Vite с Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠΌ Π½Π° сСрвСрС (SSR) ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (SPA). ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°Ρ структура ΠΊΠΎΠ΄Π° для свободного измСнСния.

Новый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Новый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ создаСтся Ρ„ΠΎΡ€ΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ рСпозитория react-skeleton, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² дальнСйшСм свободно ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ особСнности ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ВрСбования

  • Node.js >= 18

Установка

npm install

Запуск для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

npm start

ΠΈΠ»ΠΈ

npm run start:server Π‘ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠΌ Π½Π° сСрвСрС (SSR)

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ прилоТСния опрСдСляСтся Π² Ρ„Π°ΠΉΠ»Π΅ src/config.js. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ АПИ, Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ состояния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвисов. НСкоторыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .env.local, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ сСбя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ доступно ΠΏΠΎ адрСсу http://localhost:8050. ΠŸΠΎΡ€Ρ‚ мСняСтся Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра server/config.js. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра Ρ‚Π°ΠΊΠΆΠ΅ настраиваСтся прокси ΠΊ АПИ для ΠΎΠ±Ρ…ΠΎΠ΄Π° CORS.

server: {
  port: 8050,
  proxy: {...}
}

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сборщик Vite для отслСТивания измСнСния Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ β€œΠ³ΠΎΡ€ΡΡ‡Π΅Π³ΠΎβ€ обновлСния прилоТСния Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π‘Π±ΠΎΡ€ΠΊΠ°

Для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° сСрвСрС сначала выполняСтся сборка прилоТСния ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

npm run build

ΠΈΠ»ΠΈ

npm run build:server - Ссли Π½ΡƒΠΆΠ΅Π½ сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€Π° (SSR). Выполнится сборка Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠΉ ΠΈ сСрвСрной вСрсии прилоТСния.

Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ прилоТСния окаТутся Π² ΠΏΠ°ΠΏΠΊΠ΅ /dist. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ запуск

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ собранного прилоТСния Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

npm run preview - запустится Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр для ΠΎΡ‚Π΄Π°Ρ‡ΠΈ статичСских Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· /dist/client. ΠŸΡ€ΠΈ этом выполнится сборка Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠΉ вСрсии прилоТСния.

ΠΈΠ»ΠΈ

npm run preview:server - запустится сСрвСр для Ρ€Π΅Π½Π΄Π΅Ρ€Π° прилоТСния ΠΈ ΠΎΡ‚Π΄Π°Ρ‡ΠΈ статичСских Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈ этом выполнится сборка Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠΉ ΠΈ сСрвСрной вСрсии прилоТСния.

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ собрано, Ρ‚ΠΎ сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ts-node ./server/index.ts.

Для постоянной Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ процСссов pm2.

pm2 start process.json

На внСшний сСрвСр Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСнСсти ΠΏΠ°ΠΏΠΊΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ:

- /dist
- /node_modules
- /server
- /typings
- tsconfig.json
- package.json
- proxy.config.ts

Если сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€Π° (SSR) Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚ΠΎ пСрСносится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ /dist/client

Nginx

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nginx.

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· Ρ€Π΅Π½Π΄Π΅Ρ€Π° Nginx Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ ./dist/client. Если запрос Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ», Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ./dist/client/index.html.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки nginx

server {
  listen 80;
  server_name react-skeleton.com;
  location / {
    root /home/user/react-skeleton/dist/client;
    try_files $uri /index.html;
  }
}

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π½Π΄Π΅Ρ€Π° (SSR) запускаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° node.js ts-node ./server/index.ts. Π§Π΅Ρ€Π΅Π· nginx всС запросы Π½Π° страницы сайта ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€Π°.

МоТно ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС запросы, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€Π° сам Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π»ΠΈΠ±ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€, Π»ΠΈΠ±ΠΎ отдаст Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ./dist/client/assets/, Π° Ρ‚Π°ΠΊΠΆΠ΅ спроксируСт запросы ΠΊ АПИ.

Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π°Ρ‡Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ проксированиС ΠΊ АПИ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· nginx.

server {
  listen 80;
  server_name react-skeleton.com;
  client_max_body_size 10M;
  
  # ΠŸΡ€ΠΎΠΊΡΠΈ ΠΊ АПИ (Π² соотв. с настройками прилоТСния)
  location /api/ {
    proxy_redirect off;
    proxy_set_header Host api.react-skeleton.com; 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Frame-Options SAMEORIGIN;
    proxy_pass https://api.react-skeleton.com;
  }
  
  # Запросы ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ сборки (скрипты, стили, ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ..)
  location /assets/ {
    root /var/www/newsite/dist/client/;
    try_files $uri $uri/ =404; 
  }

  # Π Π΅Π½Π΄Π΅Ρ€ - проксированиС запроса Π² сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 127.0.0.1:8050
  location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Frame-Options SAMEORIGIN;
    proxy_pass http://127.0.0.1:8050;
  }
}

About

Skeleton applications on React

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages