57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
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}`);
|
|
});
|
|
}); |