A
A
Anton Essential2017-02-02 15:18:23
Pug
Anton Essential, 2017-02-02 15:18:23

Why does ReferenceError: _ is not defined appear?

Good afternoon, I get ReferenceError: _ is not defined, who knows what the problem is?
Set up according to this article .

/**
 * Нормализация пути
 *
 * В файле путь до другого файла может иметь вид `sidebar` или `partials/header`
 * поэтому каждый путь должен быть обработан.
 *
 * Эта функция добавляет к пути контекст или, проще говоря родительскую директорию.
 */
function normalizePath(filepath, context) {
  if (context) {
    return path.join(context, filepath).replace(/\\/g, '/');
  }

  return filepath;
}

/**
 * Получение путей
 *
 * С помощью регулярного выражения, забираем из файла все пути из конструкций
 * extends и include.
 */
function getPaths(source) {
  const match = source.match(/^\s*(include|extends)\s(.*)/gm);

  if (match) {
    return match.map((match) => match.replace(/\s*(include|extends)./g, '') + '.pug');
  }

  return null;
}

/**
 * Получение всех страниц из директории `app/templates`
 */
function getPages() {
  return fs.readdirSync('app/templates').filter((filepath) => /pug$/.test(filepath));
}

/**
 * Чтение файла
 */
function getPage(name) {
  const filepath = path.join('app/templates', name);

  try {
    return fs.readFileSync(filepath).toString();
  } catch (err) {
    return false;
  }
}

/**
 * Вычисление древа зависимостей
 * 
 * Функция рекурсивно проходит по всем зависимостям и заносит их в массив.
 */
function calculateTree(target, context, tree) {
  const page = getPage(target);
  if (!page) {
    return tree;
  }

  let paths = getPaths(page);

  if (!paths) {
    return tree;
  }

  paths = paths.map((filepath) => normalizePath(filepath, path.dirname(target)));
  paths.forEach((filepath) => {
    tree = calculateTree(filepath, path.dirname(target), tree);
  });

  return tree.concat(paths);
}

/**
 * Получение зависимостей для каждой из страниц
 */
function getPathsTree() {
  const cacheTree = {};
  getPages().forEach((page) => {
    cacheTree[page] = calculateTree(page, null, [page]);
  });

  return cacheTree;
}

module.exports.getPathsTree = getPathsTree;

Next pug task
gulp.task('pug', function() {
  // Получаем древо зависимостей для каждой страницы
  const pathsTree = _.getPathsTree();

  return gulp.src('app/templates/*.pug')
    // Фильтруем файлы в потоке
    .pipe($.filter((file) => {
      // Если не запущен режим слежения за изменением файлов, то пропускаем в поток
      // все страницы
      if (!global.watch) {
        return true;
      }

      // Если имя изменившегося файла есть в зависимостях страницы, то пропускаем
      // страницу дальше в поток, попутно выводя сообщение в консоль для контроля
      const changed = global.changedTplFile;
      if (pathsTree[file.relative].includes(changed)) {
        console.log($.chalk.green('>> ') + `Compiling: ${file.relative}`);
        return true;
      }

      // Иначе отбрасываем страницу
      return false;
    }))
    .pipe($.pug())
    .pipe(gulp.dest('build'));
});

Next watch task:
// Watch task
gulp.task('watch', () => {
    // Shows that run "watch" mode
    global.watch = true;


    // Modules pug
    $.watch(['app/templates/*.pug'], gulp.series('pug'))
    
    // Обработчик изменения любого из файлов в директории `app/templates`, включая события
    // удаления или создания файлов, а также директорий
    .on('all', (event, path) => {
      // Получаем имя файла и записываем его в глобальную переменную
      global.changedTplFile = path.replace(/[\\\/]/g, '/').replace(/app\/templates\//, '');
    });

When I run gulp pug I get ReferenceError: _ is not defined

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vasyl Kovbassa, 2017-02-02
@movasyl

There, as far as I remember, the author created his own broiler plate for a quick start - yellfy. Unwrap it on your machine and copy.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question