Readme index'ler eklendi.
This commit is contained in:
729
docs/DEPLOYMENT.md
Normal file
729
docs/DEPLOYMENT.md
Normal file
@@ -0,0 +1,729 @@
|
||||
# Geliştirme ve Dağıtım Kılavuzu
|
||||
|
||||
Yakıt Takip Sistemi geliştirme ortamı kurulumu, test süreçleri ve prodüksiyon dağıtımı hakkında kapsamlı rehber.
|
||||
|
||||
## 📋 İçerlik
|
||||
|
||||
- [Geliştirme Ortamı Kurulumu](#geliştirme-ortamı-kurulumu)
|
||||
- [Geliştirme Süreci](#geliştirme-süreci)
|
||||
- [Test Stratejisi](#test-stratejisi)
|
||||
- [Prodüksiyon Dağıtımı](#prodüksiyon-dağıtımı)
|
||||
- [İzleme ve Bakım](#izleme-ve-bakım)
|
||||
- [Sorun Giderme](#sorun-giderme)
|
||||
|
||||
## 🛠️ Geliştirme Ortamı Kurulumu
|
||||
|
||||
### Gereksinimler
|
||||
- **Node.js**: 16.x veya üzeri
|
||||
- **npm**: 7.x veya üzeri
|
||||
- **Git**: Son sürüm
|
||||
- **Editör**: VS Code (önerilen)
|
||||
- **Tarayıcı**: Chrome/Firefox (geliştirme araçları)
|
||||
|
||||
### Adım 1: Sistemi Kurun
|
||||
|
||||
#### Node.js Kurulumu
|
||||
```bash
|
||||
# macOS (Homebrew)
|
||||
brew install node
|
||||
|
||||
# Ubuntu/Debian
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
|
||||
# Windows
|
||||
# https://nodejs.org/en/download/ adresinden indirin
|
||||
```
|
||||
|
||||
#### VS Code ve Eklentiler
|
||||
```bash
|
||||
# Önerilen VS Code eklentileri
|
||||
- Svelte for VS Code
|
||||
- SQLite
|
||||
- Thunder Client (API testing)
|
||||
- GitLens
|
||||
- Prettier
|
||||
- ESLint
|
||||
```
|
||||
|
||||
### Adım 2: Projeyi Kurun
|
||||
|
||||
```bash
|
||||
# 1. Repoyu klonlayın
|
||||
git clone <repository-url>
|
||||
cd ytp
|
||||
|
||||
# 2. Ana proje bağımlılıklarını yükleyin
|
||||
npm install
|
||||
|
||||
# 3. Frontend bağımlılıklarını yükleyin
|
||||
cd client
|
||||
npm install
|
||||
cd ..
|
||||
|
||||
# 4. Veritabanını başlatın
|
||||
npm run prepare:db
|
||||
|
||||
# 5. Ortam değişkenlerini yapılandırın
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
### Adım 3: Ortam Değişkenleri
|
||||
|
||||
#### .env Dosyası
|
||||
```bash
|
||||
# Sunucu ayarları
|
||||
PORT=5005
|
||||
NODE_ENV=development
|
||||
|
||||
# Veritabanı ayarları
|
||||
DB_PATH=./data/app.db
|
||||
|
||||
# Session ayarları
|
||||
SESSION_SECRET=your-secret-key-here
|
||||
SESSION_TIMEOUT=24h
|
||||
|
||||
# CORS ayarları
|
||||
CORS_ORIGIN=http://localhost:5173
|
||||
|
||||
# Log seviyesi
|
||||
LOG_LEVEL=debug
|
||||
```
|
||||
|
||||
### Adım 4: Geliştirme Sunucusunu Başlatın
|
||||
|
||||
```bash
|
||||
# Geliştirme modunda başlatma (hem backend hem frontend)
|
||||
npm run dev
|
||||
|
||||
# Sadece backend sunucusu
|
||||
npm run start:server
|
||||
|
||||
# Sadece frontend (ayrı terminal)
|
||||
cd client && npm run dev
|
||||
```
|
||||
|
||||
### Adım 5: Doğrulama
|
||||
|
||||
```bash
|
||||
# Sunucu çalışıyor mu?
|
||||
curl http://localhost:5005/api/session
|
||||
|
||||
# Frontend çalışıyor mu?
|
||||
# Tarayıcıda http://localhost:5173 açın
|
||||
```
|
||||
|
||||
## 🔄 Geliştirme Süreci
|
||||
|
||||
### Git Workflow
|
||||
|
||||
#### Branch Stratejisi
|
||||
```
|
||||
main # Prodüksiyon branch'i
|
||||
├── develop # Geliştirme branch'i
|
||||
├── feature/* # Yeni özellikler
|
||||
├── bugfix/* # Hata düzeltmeleri
|
||||
└── hotfix/* # Acil düzeltmeler
|
||||
```
|
||||
|
||||
#### Commit Mesajları
|
||||
```bash
|
||||
# Format
|
||||
<type>(<scope>): <description>
|
||||
|
||||
# Örnekler
|
||||
feat(auth): add JWT token refresh mechanism
|
||||
fix(api): handle null vehicle_id gracefully
|
||||
docs(readme): update installation instructions
|
||||
refactor(db): optimize fuel_slip queries
|
||||
```
|
||||
|
||||
#### Geliştirme Akışı
|
||||
```bash
|
||||
# 1. Yeni feature branch oluştur
|
||||
git checkout -b feature/fuel-slip-pdf
|
||||
|
||||
# 2. Geliştirme yap
|
||||
# ... kod değişiklikleri
|
||||
|
||||
# 3. Değişiklikleri commit et
|
||||
git add .
|
||||
git commit -m "feat(fuel): add PDF generation for fuel slips"
|
||||
|
||||
# 4. Branch'e push et
|
||||
git push origin feature/fuel-slip-pdf
|
||||
|
||||
# 5. Pull Request oluştur
|
||||
# GitHub/GitLab üzerinden PR oluştur
|
||||
|
||||
# 6. Review ve merge
|
||||
# Code review sonrası develop branch'ine merge
|
||||
|
||||
# 7. Geliştirme sunucusunu güncelle
|
||||
git checkout develop
|
||||
git pull origin develop
|
||||
```
|
||||
|
||||
### Kod Kalitesi
|
||||
|
||||
#### ESLint Yapılandırması
|
||||
```json
|
||||
// .eslintrc.json
|
||||
{
|
||||
"extends": ["eslint:recommended"],
|
||||
"env": {
|
||||
"node": true,
|
||||
"es2021": true
|
||||
},
|
||||
"rules": {
|
||||
"no-console": "warn",
|
||||
"no-unused-vars": "error",
|
||||
"prefer-const": "error"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Prettier Yapılandırması
|
||||
```json
|
||||
// .prettierrc
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "es5",
|
||||
"singleQuote": true,
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2
|
||||
}
|
||||
```
|
||||
|
||||
### Test Stratejisi
|
||||
|
||||
#### Test Türleri
|
||||
- **Unit Tests**: Fonksiyon ve bileşen testleri
|
||||
- **Integration Tests**: API endpoint testleri
|
||||
- **E2E Tests**: Kullanıcı senaryoları
|
||||
- **Manual Tests**: Manuel QA süreçleri
|
||||
|
||||
#### Test Tools
|
||||
```bash
|
||||
# Test framework'leri
|
||||
npm install --save-dev jest supertest
|
||||
npm install --save-dev @testing-library/svelte
|
||||
npm install --save-dev playwright
|
||||
```
|
||||
|
||||
#### Örnek Testler
|
||||
```javascript
|
||||
// tests/api.test.js
|
||||
const request = require('supertest');
|
||||
const app = require('../server/index');
|
||||
|
||||
describe('Authentication', () => {
|
||||
test('POST /api/auth/login with valid credentials', async () => {
|
||||
const response = await request(app)
|
||||
.post('/api/auth/login')
|
||||
.send({ username: 'admin', password: 'Admin!123' })
|
||||
.expect(200);
|
||||
|
||||
expect(response.body).toHaveProperty('token');
|
||||
expect(response.body.user.role).toBe('admin');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## 🚀 Prodüksiyon Dağıtımı
|
||||
|
||||
### Dağıtım Seçenekleri
|
||||
|
||||
#### 1. Docker Dağıtımı (Önerilen)
|
||||
|
||||
##### Dockerfile
|
||||
```dockerfile
|
||||
# Multi-stage build
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
# Build stage
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production
|
||||
|
||||
COPY . .
|
||||
WORKDIR /app/client
|
||||
RUN npm ci
|
||||
RUN npm run build
|
||||
|
||||
# Production stage
|
||||
FROM node:18-alpine AS production
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/package*.json ./
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
COPY --from=builder /app/server ./server
|
||||
COPY --from=builder /app/client/dist ./client/dist
|
||||
COPY --from=builder /app/data ./data
|
||||
|
||||
EXPOSE 5005
|
||||
|
||||
CMD ["node", "server/index.js"]
|
||||
```
|
||||
|
||||
##### docker-compose.yml
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ytp-app:
|
||||
build: .
|
||||
ports:
|
||||
- "5005:5005"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=5005
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
restart: unless-stopped
|
||||
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||
- ./ssl:/etc/nginx/ssl
|
||||
depends_on:
|
||||
- ytp-app
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
##### Docker Komutları
|
||||
```bash
|
||||
# Build ve çalıştırma
|
||||
docker-compose up -d --build
|
||||
|
||||
# Logları izleme
|
||||
docker-compose logs -f ytp-app
|
||||
|
||||
# Yeniden başlatma
|
||||
docker-compose restart ytp-app
|
||||
|
||||
# Temizleme
|
||||
docker-compose down -v
|
||||
```
|
||||
|
||||
#### 2. PM2 ile Dağıtım
|
||||
|
||||
##### PM2 Yapılandırması
|
||||
```json
|
||||
// ecosystem.config.js
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'ytp-app',
|
||||
script: 'server/index.js',
|
||||
instances: 'max',
|
||||
exec_mode: 'cluster',
|
||||
env: {
|
||||
NODE_ENV: 'production',
|
||||
PORT: 5005
|
||||
},
|
||||
error_file: './logs/err.log',
|
||||
out_file: './logs/out.log',
|
||||
log_file: './logs/combined.log',
|
||||
time: true
|
||||
}]
|
||||
};
|
||||
```
|
||||
|
||||
##### PM2 Komutları
|
||||
```bash
|
||||
# PM2 kurulumu
|
||||
npm install -g pm2
|
||||
|
||||
# Uygulamayı başlatma
|
||||
pm2 start ecosystem.config.js
|
||||
|
||||
# Durumunu kontrol etme
|
||||
pm2 status
|
||||
|
||||
# Logları izleme
|
||||
pm2 logs ytp-app
|
||||
|
||||
# Yeniden başlatma
|
||||
pm2 restart ytp-app
|
||||
|
||||
# Sunucu yeniden başlatığında otomatik başlatma
|
||||
pm2 startup
|
||||
pm2 save
|
||||
```
|
||||
|
||||
#### 3. Systemd Service
|
||||
|
||||
##### Service Dosyası
|
||||
```ini
|
||||
# /etc/systemd/system/ytp.service
|
||||
[Unit]
|
||||
Description=Yakit Takip Sistemi
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
WorkingDirectory=/var/www/ytp
|
||||
ExecStart=/usr/bin/node server/index.js
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
Environment=NODE_ENV=production
|
||||
Environment=PORT=5005
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
##### Systemd Komutları
|
||||
```bash
|
||||
# Service'i etkinleştirme
|
||||
sudo systemctl enable ytp.service
|
||||
|
||||
# Service'i başlatma
|
||||
sudo systemctl start ytp.service
|
||||
|
||||
# Durumunu kontrol etme
|
||||
sudo systemctl status ytp.service
|
||||
|
||||
# Logları izleme
|
||||
sudo journalctl -u ytp.service -f
|
||||
```
|
||||
|
||||
### Nginx Yapılandırması
|
||||
|
||||
#### nginx.conf
|
||||
```nginx
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
upstream ytp_backend {
|
||||
server 127.0.0.1:5005;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
# Frontend statik dosyaları
|
||||
location / {
|
||||
root /var/www/ytp/client/dist;
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
# Cache headers
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
|
||||
# API requests
|
||||
location /api/ {
|
||||
proxy_pass http://ytp_backend;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
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_cache_bypass $http_upgrade;
|
||||
}
|
||||
|
||||
# WebSocket connections
|
||||
location /socket.io/ {
|
||||
proxy_pass http://ytp_backend;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
# HTTPS (SSL kuruluysa)
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name your-domain.com;
|
||||
|
||||
ssl_certificate /etc/nginx/ssl/cert.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/key.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
|
||||
# Aynı proxy ayarları burada da geçerli
|
||||
# ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Prodüksiyon Kurulum Script'i
|
||||
|
||||
#### setup.sh
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# Prodüksiyon kurulum script'i
|
||||
set -e
|
||||
|
||||
echo "🚀 YTP Prodüksiyon Kurulumu Başlatılıyor..."
|
||||
|
||||
# Sistem güncellemeleri
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# Node.js kurulumu
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
|
||||
# PM2 kurulumu
|
||||
sudo npm install -g pm2
|
||||
|
||||
# Nginx kurulumu
|
||||
sudo apt install -y nginx
|
||||
|
||||
# Firewall ayarları
|
||||
sudo ufw allow ssh
|
||||
sudo ufw allow 'Nginx Full'
|
||||
sudo ufw --force enable
|
||||
|
||||
# Proje kurulumu
|
||||
sudo mkdir -p /var/www/ytp
|
||||
sudo chown $USER:$USER /var/www/ytp
|
||||
|
||||
# Git ile projeyi çek
|
||||
cd /var/www/ytp
|
||||
git clone <repository-url> .
|
||||
|
||||
# Bağımlılıkları yükle
|
||||
npm install
|
||||
cd client && npm install && cd ..
|
||||
|
||||
# Veritabanını başlat
|
||||
npm run prepare:db
|
||||
|
||||
# PM2 başlat
|
||||
pm2 start ecosystem.config.js
|
||||
pm2 startup
|
||||
pm2 save
|
||||
|
||||
# Nginx yapılandırması
|
||||
sudo cp nginx.conf /etc/nginx/sites-available/ytp
|
||||
sudo ln -s /etc/nginx/sites-available/ytp /etc/nginx/sites-enabled/
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
|
||||
echo "✅ Kurulum tamamlandı!"
|
||||
echo "🌐 Uygulama: http://your-domain.com"
|
||||
echo "📊 PM2 durumu: pm2 status"
|
||||
echo "📋 Loglar: pm2 logs ytp-app"
|
||||
```
|
||||
|
||||
## 📊 İzleme ve Bakım
|
||||
|
||||
### Log Yönetimi
|
||||
|
||||
#### Log Yapılandırması
|
||||
```javascript
|
||||
// server/logger.js
|
||||
const winston = require('winston');
|
||||
|
||||
const logger = winston.createLogger({
|
||||
level: process.env.LOG_LEVEL || 'info',
|
||||
format: winston.format.combine(
|
||||
winston.format.timestamp(),
|
||||
winston.format.json()
|
||||
),
|
||||
transports: [
|
||||
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
|
||||
new winston.transports.File({ filename: 'logs/combined.log' }),
|
||||
new winston.transports.Console({
|
||||
format: winston.format.simple()
|
||||
})
|
||||
]
|
||||
});
|
||||
|
||||
module.exports = logger;
|
||||
```
|
||||
|
||||
#### Log Rotasyon
|
||||
```bash
|
||||
# logrotate yapılandırması
|
||||
# /etc/logrotate.d/ytp
|
||||
/var/www/ytp/logs/*.log {
|
||||
daily
|
||||
missingok
|
||||
rotate 52
|
||||
compress
|
||||
notifempty
|
||||
create 644 www-data www-data
|
||||
postrotate
|
||||
pm2 reloadLogs
|
||||
endscript
|
||||
}
|
||||
```
|
||||
|
||||
### Performans İzleme
|
||||
|
||||
#### Metrics Collection
|
||||
```javascript
|
||||
// server/metrics.js
|
||||
const express = require('express');
|
||||
const responseTime = require('response-time');
|
||||
|
||||
const app = express();
|
||||
|
||||
// Response time middleware
|
||||
app.use(responseTime((req, res, time) => {
|
||||
console.log(`${req.method} ${req.url} - ${time}ms`);
|
||||
}));
|
||||
|
||||
// Health check endpoint
|
||||
app.get('/health', (req, res) => {
|
||||
res.json({
|
||||
status: 'healthy',
|
||||
timestamp: new Date().toISOString(),
|
||||
uptime: process.uptime(),
|
||||
memory: process.memoryUsage()
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Backup Stratejisi
|
||||
|
||||
#### Database Backup Script
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# backup.sh
|
||||
|
||||
BACKUP_DIR="/var/backups/ytp"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
DB_PATH="/var/www/ytp/data/app.db"
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Veritabanı yedeği
|
||||
sqlite3 $DB_PATH ".backup $BACKUP_DIR/app_backup_$DATE.db"
|
||||
|
||||
# Eski yedekleri temizle (30 gün)
|
||||
find $BACKUP_DIR -name "app_backup_*.db" -mtime +30 -delete
|
||||
|
||||
echo "Backup completed: $BACKUP_DIR/app_backup_$DATE.db"
|
||||
```
|
||||
|
||||
#### Cron Job
|
||||
```bash
|
||||
# Günlük backup (saat 02:00)
|
||||
0 2 * * * /var/www/ytp/scripts/backup.sh
|
||||
|
||||
# Log rotation (haftalık)
|
||||
0 3 * * 0 /usr/sbin/logrotate /etc/logrotate.d/ytp
|
||||
|
||||
# Sistem health check (5 dakikada bir)
|
||||
*/5 * * * * curl -f http://localhost:5005/health || echo "Health check failed" | mail -s "YTP Alert" admin@domain.com
|
||||
```
|
||||
|
||||
## 🔧 Sorun Giderme
|
||||
|
||||
### Yaygın Sorunlar
|
||||
|
||||
#### 1. Port Çakışması
|
||||
```bash
|
||||
# Port kullanan süreci bul
|
||||
lsof -i :5005
|
||||
|
||||
# Süreci sonlandır
|
||||
kill -9 <PID>
|
||||
|
||||
# Farklı port kullan
|
||||
PORT=3000 npm start
|
||||
```
|
||||
|
||||
#### 2. Veritabanı Hataları
|
||||
```bash
|
||||
# Veritabanı dosyası izinleri
|
||||
sudo chown www-data:www-data data/app.db
|
||||
sudo chmod 664 data/app.db
|
||||
|
||||
# Veritabanı durumu
|
||||
sqlite3 data/app.db ".tables"
|
||||
sqlite3 data/app.db "SELECT COUNT(*) FROM fuel_slips;"
|
||||
```
|
||||
|
||||
#### 3. Memory Issues
|
||||
```bash
|
||||
# Memory kullanımı
|
||||
free -h
|
||||
ps aux --sort=-%mem | head
|
||||
|
||||
# Node.js memory limit
|
||||
node --max-old-space-size=4096 server/index.js
|
||||
```
|
||||
|
||||
#### 4. Socket.IO Connection Issues
|
||||
```bash
|
||||
# WebSocket connection test
|
||||
wscat -c ws://localhost:5005/socket.io/?EIO=4&transport=websocket
|
||||
|
||||
# Nginx log kontrolü
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
```
|
||||
|
||||
### Debugging Tools
|
||||
|
||||
#### Node.js Debugging
|
||||
```bash
|
||||
# Debug mode
|
||||
node --inspect server/index.js
|
||||
|
||||
# Chrome DevTools ile debugging
|
||||
# chrome://inspect adresini açın
|
||||
```
|
||||
|
||||
#### Network Debugging
|
||||
```bash
|
||||
# Port test
|
||||
telnet localhost 5005
|
||||
|
||||
# SSL cert test
|
||||
openssl s_client -connect your-domain.com:443
|
||||
```
|
||||
|
||||
### Performance Optimization
|
||||
|
||||
#### Database Optimization
|
||||
```sql
|
||||
-- Index ekleme
|
||||
CREATE INDEX idx_fuel_slips_date ON fuel_slips(slip_date);
|
||||
CREATE INDEX idx_fuel_slips_status ON fuel_slips(status);
|
||||
|
||||
-- Query optimization
|
||||
EXPLAIN QUERY PLAN SELECT * FROM fuel_slips WHERE status = 'pending';
|
||||
```
|
||||
|
||||
#### Frontend Optimization
|
||||
```javascript
|
||||
// vite.config.js
|
||||
export default {
|
||||
build: {
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks: {
|
||||
vendor: ['svelte'],
|
||||
api: ['./src/api.js']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Not**: Prodüksiyon dağıtımından önce mutlaka test ortamında tüm senaryoları doğrulayın.
|
||||
Reference in New Issue
Block a user