使用pug-html-loader将数据传递到pug(无法读取undefined的属性)

mae*_*ove 2 javascript node.js webpack webpack-html-loader pug

根据pug-html-loader的自述文件,加载器接受一个data对象,该对象作为的一部分传递options给模板。虽然optionspug API参考中没有提供,但我发现的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
    }
  }
Run Code Online (Sandbox Code Playgroud)

根据这个问题,我想通过以下方式访问:

title= data.title
Run Code Online (Sandbox Code Playgroud)

但是,编译时总是遇到以下错误:

ERROR in   Error: Child compilation failed:
  Module build failed: TypeError: Cannot read property 'title' of undefined
Run Code Online (Sandbox Code Playgroud)

出于调试目的,我在模板中包含以下行:

-
  console.log(' DATA! ' + data);
Run Code Online (Sandbox Code Playgroud)

结果是:

DATA! undefined
Run Code Online (Sandbox Code Playgroud)

我还通过声明一些乱码而不是对象(例如,字符串,纯json,数字..)来确保数据正确地传递给pug,然后pug编译器会抱怨数据格式无效等。 。

有人面临同样的问题吗?

小智 5

您应该直接引用数据(即,不要在字段前加上data

因此,您应该像这样更改代码:

{
  loader: 'pug-html-loader',
  options: {
    data: {
      title: 'Hello World'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后从您的PUG模板中引用它

doctype html
html
  head
    title= hello
Run Code Online (Sandbox Code Playgroud)