1

我正在尝试在 gulp 中设置 Metalsmith 流程。问题是我不知道如何设置从任意数量的不同格式(YAML 或 JSON)文件中加载元数据,然后在页面中全局使用它们。它适用于局部和布局。

这是我的 src 文件夹结构,仅用于静态站点资产:

_data/
  settings.yaml
  info.json
_layouts/
  default.html
_partials/
  menu.html

index.html

这是我最新的 gulp 过程:

'use strict';

/***********
 * PLUGINS *
 ***********/

var gulp            = require('gulp'),
    metalsmith      = require('gulp-metalsmith'),
    markdown        = require('metalsmith-markdown'),
    handlebars      = require('metalsmith-handlebars'),
    layouts         = require('metalsmith-layouts'),
    ignore          = require('metalsmith-ignore'),
    rootPath        = require('metalsmith-rootpath'),
    metadata        = require('metalsmith-metadata'),
    runSequence     = require('run-sequence').use(gulp); 


// Paths (external file with all paths)
var app_paths = require('../paths.js');

gulp.task('metalsmith', function() {
  return gulp.src('./src/site/**')
    .pipe(metalsmith({
      // Metalsmith's root directory, for example for locating templates, defaults to CWD
      root: './src/site/',
      // Parsing frontmatter, defaults to true
      frontmatter: true,
      json: true,
      // Metalsmith plugins to use:
      use: [
        metadata({
          "settings": "_data/settings.yaml",
          "info": "_data/info.json"
        }),
        rootPath(),
        markdown(),
        ignore(['_layouts/**/*', '_partials/**/*', '_data/**/*']),
        layouts({
          engine:     'handlebars',
          directory:  '_layouts/',
          partials:   '_partials/',
          default:    'default.html'
        }),
      ]
    }))
    .pipe(gulp.dest(app_paths.htmlStaticOut));
});

settings.yaml 有这个键/值对:

site_name: Site name

当我尝试在页面中使用 {{settings.site_name}} 访问 settings.yaml 中的某个键时 - 没有任何反应。我也无法从页面内访问前事数据。

任何人都知道问题可能出在哪里?

4

0 回答 0