Передать данные в pug с помощью pug-html-loader (не может прочитать свойство undefined)

Согласно readme из pug-html-loader, загрузчик принимает data объект, который передается как часть options к шаблону. Пока недоступно на options в справочнике API pug найденный мной плагин grunt ( grunt-contrib-pug) использует API таким же образом.

Я указал следующие параметры для загрузчика:

  loader: 'pug-html-loader',
  options: {
    pretty: true,
    exports: false,
    debug: !env.production,
    compileDebug: !env.production,
    cache: config.build.useCaching,
    doctype: 'html',
    data: {
      title:    config.metadata.title,
      baseUrl:  config.build.baseUrl,
      server:   env.server,
      metadata: config.metadata
    }
  }

К которому я хотел бы получить доступ следующим образом, согласно этому вопросу:

title= data.title

Тем не менее, я всегда сталкиваюсь со следующей ошибкой при компиляции:

ERROR in   Error: Child compilation failed:
  Module build failed: TypeError: Cannot read property 'title' of undefined

В целях отладки я включил в шаблон следующую строку:

-
  console.log(' DATA! ' + data);

Что приводит к:

DATA! undefined

Я также удостоверился, что данные правильно передаются в pug, объявив некоторые тарабарщины вместо объекта (например, строку, обычный json, число...), затем компилятор pug жалуется, что данные не в правильном формате и т. Д.,

Кто-нибудь сталкивается с той же проблемой?

1 ответ

Решение

Вы должны ссылаться на данные напрямую (т.е. без префикса полей с data)

Поэтому вы должны изменить свой код следующим образом:

{
  loader: 'pug-html-loader',
  options: {
    data: {
      title: 'Hello World'
    }
  }
}

А затем сослаться на это из вашего шаблона PUG

doctype html
html
  head
    title= hello
Другие вопросы по тегам