Компиляция PugJS
Нужно скомпилировать файлы из папки src/myproject в папку build/myproject
Делаю это такой командой в консоле
pug src/myproject -P -w -o build/myproject
Как сделать то же самое через node index.js? Что нужно прописать в этот самый index.js?
Видимо, нужно что-то такое, но что именно (такой код вызывает ошибку)?
import pug from 'pug'
pug.renderFile('src/myproject', {
pretty: true,
})
Ответы (1 шт):
Автор решения: DiD
→ Ссылка
Накидал небольшой скрипт.
В работе не проверял. Если будут ошибки, напишите в коммент.
/* build.js */
const fs = require('fs').promises;
const path = require('path');
const pug = require('pug-async');
/**
* Рекурсивная функция поиска файлов по дереву ФС
* @param {string} root путь к началу поиска
* @param {string} ends условие поиска
* @param {number} maxDepth защита от зацикливания (по-умолчанию отключена)
* @param {number} depth параметр глубины (для внутреннего использования)
*/
async function* find(root, ends, maxDepth = 0, depth = 0) {
let stat = await fs.lstat(root);
if (stat.isDirectory()) {
for (let item of await fs.readdir(root))
if (!maxDepth || depth < maxDepth)
try {
let child = path.join(root, item);
yield* find(child, ends, maxDepth, depth + 1);
} catch (error) {
console.error(error.stack);
}
} else {
if (root.endsWith(ends)) {
yield root;
}
}
}
(async () => {
/**
* Контекст со значениями переменных для использования в шаблонах
*/
let context = {};
/* основной цикл */
for await (let source of find(__dirname, '.pug')) {
/* рендеринг шаблона */
let rendered = await pug.renderFile(source, context);
/* путь для сохранения результатов */
let target = source.replace(__dirname, path.join(__dirname, 'dist'));
/* Создание папки для результатов */
await fs.mkdir(path.dirname(target), { recursive: true });
/* Сохранение в файл */
await fs.writeFile(target, rendered);
/* Отображение прогресса */
console.debug(source, '=>', target);
}
})();
Как использовать?
npm i pug-async
node build