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-шаблон и отслеживает изменения в соответствующих файлах. Помните также о необходимости изменить пути к файлам в соответствии с вашей структурой каталогов и базой данных.