добавил скрипт для пререндеринга и карту сайта

This commit is contained in:
Joe_Peach committed 2026-04-12 00:36:08 +03:00
1 parent 3bf10b0e52
commit b7027d1183
5 files changed
+815 -2503

No files matched your search

+731 -2500
View File
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -8,6 +8,8 @@
"build": "vite build", "build": "vite build",
"build:check": "tsc -b && vite build", "build:check": "tsc -b && vite build",
"lint": "eslint .", "lint": "eslint .",
"prerender": "node scripts/prerender.js",
"build:seo": "npm run build && npm run preview & sleep 5 && npm run prerender && kill $(lsof -t -i:4173)",
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
@@ -39,10 +41,10 @@
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.22", "eslint-plugin-react-refresh": "^0.4.22",
"globals": "^16.4.0", "globals": "^16.4.0",
"puppeteer": "^24.40.0",
"typescript": "~5.9.3", "typescript": "~5.9.3",
"typescript-eslint": "^8.45.0", "typescript-eslint": "^8.45.0",
"vite": "^7.1.7", "vite": "^7.1.7",
"vite-plugin-prerender": "^1.0.8",
"vite-plugin-sitemap": "^0.8.2" "vite-plugin-sitemap": "^0.8.2"
} }
} }
+69
View File
@@ -0,0 +1,69 @@
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
// Список всех страниц
const routes = [
'/',
'/products',
'/about',
// добавьте свои URL
];
const distPath = resolve(__dirname, '../dist');
const indexHtmlPath = resolve(distPath, 'index.html');
if (!existsSync(indexHtmlPath)) {
console.error('❌ Сначала запустите npm run build');
process.exit(1);
}
// Читаем исходный HTML
let baseHtml = readFileSync(indexHtmlPath, 'utf-8');
// Добавляем базовые мета-теги для каждой страницы
const pages = {
'/': {
title: 'Магазин труб - Главная',
description: 'Купить канализационные трубы по низким ценам'
},
'/products': {
title: 'Каталог труб для канализации',
description: 'Широкий выбор труб, фитингов и комплектующих'
},
'/about': {
title: 'О магазине труб',
description: 'Информация о нашей компании'
}
};
routes.forEach(route => {
const pageInfo = pages[route] || pages['/'];
// Заменяем мета-теги в HTML
let html = baseHtml
.replace(/<title>.*?<\/title>/, `<title>${pageInfo.title}</title>`)
.replace(
/<meta name="description".*?>/,
`<meta name="description" content="${pageInfo.description}">`
);
// Определяем путь для сохранения
let outputPath;
if (route === '/') {
outputPath = indexHtmlPath;
} else {
const routeDir = resolve(distPath, route.substring(1));
if (!existsSync(routeDir)) {
mkdirSync(routeDir, { recursive: true });
}
outputPath = resolve(routeDir, 'index.html');
}
writeFileSync(outputPath, html);
console.log(`✅ ${route} → ${outputPath}`);
});
console.log('✨ Done!');
+1 -1
View File
@@ -24,5 +24,5 @@
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true "noUncheckedSideEffectImports": true
}, },
"include": ["src"] "include": ["src", "scripts"]
} }
+11 -1
View File
@@ -1,9 +1,19 @@
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react' import react from '@vitejs/plugin-react'
import Sitemap from 'vite-plugin-sitemap';
// https://vite.dev/config/ // https://vite.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [react()], plugins: [
react(),
Sitemap({
hostname: 'https://pvh.projects.rustprogersteam.ru',
exclude: ['/admin', '/profile'],
readable: true,
outDir: './dist',
}),
],
server: { server: {
host: '0.0.0.0', // Слушаем все интерфейсы host: '0.0.0.0', // Слушаем все интерфейсы
port: 5173, port: 5173,