const express = require('express'); const path = require('path'); const fs = require('fs'); const sharp = require('sharp'); const app = express(); const PORT = process.env.PORT || 3000; // Функция для автоматической конвертации изображений async function convertImages() { const imgDir = path.join(__dirname, 'public', 'img'); // Проверяем, существует ли папка img if (!fs.existsSync(imgDir)) { console.log('Папка img не найдена, пропускаем конвертацию.'); return; } const files = fs.readdirSync(imgDir); for (const file of files) { const filePath = path.join(imgDir, file); const ext = path.extname(file).toLowerCase(); // Проверяем, является ли файл JPG или PNG if (ext === '.jpg' || ext === '.jpeg' || ext === '.png') { const fileNameNoExt = path.parse(file).name; const webpPath = path.join(imgDir, `${fileNameNoExt}.webp`); // Проверяем, существует ли уже файл .webp для этого изображения if (!fs.existsSync(webpPath)) { try { await sharp(filePath) .webp({ quality: 85 }) // Качество 85 — золотая середина .toFile(webpPath); console.log(`✅ Сконвертировано: ${file} -> ${fileNameNoExt}.webp`); } catch (err) { console.error(`❌ Ошибка при конвертации ${file}:`, err); } } } } } // Раздача статических файлов из папки public app.use(express.static(path.join(__dirname, 'public'))); app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); // Сначала конвертируем, потом запускаем сервер convertImages().then(() => { app.listen(PORT, () => { console.log(`Сервер Hotel 777 запущен: http://localhost:${PORT}`); }); });