Невозможно включить файл относительного пути с помощью шаблона Jade

Я получаю следующую ошибку, когда я пытаюсь включить файл в той же папке:

the "filename" option is required to use "include" with "relative" paths 

есть два файла:

.Джейд!--5-->

list_of_items.Джейд!--5-->

.content-container
  .row
    .col-lg-10.col-lg-offset-1.col-xs-12
      .row
        .col-xs-3
          include list_of_items
        .col-xs-9
          include content

Я попытался использовать базовый путь, но затем получил следующую ошибку:

the "basedir" option is required to use "include" with "absolute" paths

код для базового пути выглядит следующим образом:

.content-container
  .row
    .col-lg-10.col-lg-offset-1.col-xs-12
      .row
        .col-xs-3
          include /User/project/list_of_items
        .col-xs-9
          include content

Я в полном недоумении. Есть ли где-то еще место, которого мне не хватает? Он кажется, это должно быть что-то очень простое. Что я упускаю?

2 ответов


вы используете jade.compile(), да? Как говорится в сообщении об ошибке, вы не передав . Поскольку вы даете только строку для компиляции в Jade, она не знает, где искать включенные файлы.

пример, где сценарий и файлы jade находятся в одной папке. The index.jade файл включает в себя другой файл с помощью include foo:

var jade = require('jade'),
    fs   = require('fs'),
    path = require('path');

var fn = jade.compile(fs.readFileSync('index.jade', 'utf-8'), {
  filename: path.join(__dirname, 'index.jade'),
  pretty:   true
});

console.log(fn());

или с "абсолютными путями", которые в Jade являются абсолютными по отношению к данному basedir вы сделали бы следующий. The index.jade файл теперь включает в себя тот же файл, но с использованием абсолютного пути, т. е. include /foo:

var jade = require('jade'),
    fs   = require('fs');

var fn = jade.compile(fs.readFileSync('index.jade', 'utf-8'), {
  basedir: __dirname,
  pretty:  true
});

console.log(fn());

для всех параметров см. API docs.


вы можете отобразить динамический шаблон, используя функцию в локалиях. Этот метод также поддерживает фильтры.

Джейд файлом

+render('contents/index.md', {filter:'marked'});

Залпом Трубы

.pipe(jade({
  locals: {
    render: function (filePath, options) {
      return jade.render(`include${options.filter ? (':' + options.filter) : ''} ${filePath}`, {
        filename: pathToJadeFileDir + '/something-not_important'
      });
    }
  }
}))