November 15, 2023
Компиляция шаблона
Теперь, когда файл EJS изменяется, скрипт автоматически обнаруживает изменения и перекомпилирует EJS-шаблон, сохраняя результат в HTML-файл.
const chokidar = require('chokidar');
const ejs = require('ejs');
const fs = require('fs');
// Путь к вашему EJS-файлу
const ejsFilePath = 'path/to/your/file.ejs';
// Путь к выходному HTML-файлу
const htmlFilePath = 'path/to/your/output/file.html';
// Функция для компиляции EJS-шаблона
const compileEjs = () => {
const ejsTemplate = fs.readFileSync(ejsFilePath, 'utf8');
const compiledTemplate = ejs.compile(ejsTemplate);
const htmlContent = compiledTemplate(/* Ваши данные для передачи в шаблон */);
fs.writeFileSync(htmlFilePath, htmlContent, 'utf8');
console.log('EJS template compiled and saved to HTML file.');
};
// Наблюдение за изменениями в EJS-файле и перекомпиляция при необходимости
const watcher = chokidar.watch(ejsFilePath);
watcher.on('change', (path) => {
console.log(`File ${path} changed. Recompiling...`);
compileEjs();
});
// Запуск компиляции при запуске скрипта
compileEjs();
Скрипт будет отслеживать изменения во всех указанных вами EJS-файлах и автоматически перекомпилировать их при необходимости.
const chokidar = require('chokidar');
const ejs = require('ejs');
const fs = require('fs');
// Массив путей к вашим EJS-файлам
const ejsFilePaths = [
'path/to/your/file1.ejs',
'path/to/your/file2.ejs',
// Добавьте пути к другим файлам по мере необходимости
];
// Функция для компиляции EJS-шаблона
const compileEjs = (ejsFilePath) => {
const ejsTemplate = fs.readFileSync(ejsFilePath, 'utf8');
const compiledTemplate = ejs.compile(ejsTemplate);
const htmlFilePath = ejsFilePath.replace('.ejs', '.html'); // Генерация соответствующего HTML-пути
const htmlContent = compiledTemplate(/* Ваши данные для передачи в шаблон */);
fs.writeFileSync(htmlFilePath, htmlContent, 'utf8');
console.log(`EJS template compiled and saved to HTML file: ${htmlFilePath}`);
};
// Наблюдение за изменениями во всех EJS-файлах и перекомпиляция при необходимости
const watcher = chokidar.watch(ejsFilePaths);
watcher.on('change', (path) => {
console.log(`File ${path} changed. Recompiling...`);
compileEjs(path);
});
// Запуск компиляции для всех файлов при запуске скрипта
ejsFilePaths.forEach((path) => compileEjs(path));А если шаблонов гораздо больше ;)
const chokidar = require('chokidar');
const ejs = require('ejs');
const fs = require('fs');
const sqlite3 = require('sqlite3');
// Подключение к базе данных SQLite
const db = new sqlite3.Database('path/to/your/database.db');
// Функция для выполнения запроса к базе данных и извлечения имен шаблонов
const getTemplateNames = () => {
return new Promise((resolve, reject) => {
const query = 'SELECT page_name FROM pages'; // Предполагается, что ваша таблица называется "pages"
db.all(query, (err, rows) => {
if (err) {
reject(err);
} else {
const templateNames = rows.map(row => row.page_name);
resolve(templateNames);
}
});
});
};
// Функция для компиляции EJS-шаблона
const compileEjs = async (templateName) => {
const ejsFilePath = `path/to/your/${templateName}.ejs`;
const ejsTemplate = fs.readFileSync(ejsFilePath, 'utf8');
const compiledTemplate = ejs.compile(ejsTemplate);
const htmlFilePath = `path/to/your/output/${templateName}.html`;
const htmlContent = compiledTemplate(/* Ваши данные для передачи в шаблон */);
fs.writeFileSync(htmlFilePath, htmlContent, 'utf8');
console.log(`EJS template compiled and saved to HTML file: ${htmlFilePath}`);
};
// Запуск компиляции для всех шаблонов из базы данных при запуске скрипта
getTemplateNames()
.then(templateNames => {
templateNames.forEach(templateName => compileEjs(templateName));
})
.catch(err => console.error('Error fetching template names from the database:', err));
// Наблюдение за изменениями во всех EJS-файлах и перекомпиляция при необходимости
const watcher = chokidar.watch('path/to/your/*.ejs'); // Наблюдение за изменениями во всех EJS-файлах
watcher.on('change', (path) => {
const templateName = path.replace(/^.*[\\\/]/, '').slice(0, -4); // Извлечение имени шаблона из пути
console.log(`File ${path} changed. Recompiling...`);
compileEjs(templateName);
});
// Закрытие соединения с базой данных при завершении работы
process.on('exit', () => db.close());
В этом скрипте используется асинхронная функция getTemplateNames, чтобы извлечь имена шаблонов из базы данных. Затем скрипт компилирует каждый EJS-шаблон и отслеживает изменения в соответствующих файлах. Помните также о необходимости изменить пути к файлам в соответствии с вашей структурой каталогов и базой данных.