Компиляция 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
→ Ссылка