通过Javascript直接从数组创建metalsmith集合

问题描述 投票:1回答:1

我正在使用Metalsmith的JavaScript API和metalsmith-collections生成一个静态站点。我有一个自定义构建脚本,它汇集了一个数组dogs,我想用它来创建一个新的集合。

const Metalsmith       = require('metalsmith')
const collections      = require('metalsmith-collections')
const layouts          = require('metalsmith-layouts')

var dogs = [
  { name: 'Rover' },
  { name: 'Dog' },
  { name: 'Daisy' }
]

Metalsmith(__dirname)
  .metadata({})
  .source('./src')
  .destination('./build')
  .clean(true)
  .use(layouts())
  .use(collections({
    dogs: {
      // ?
    }
  })
  .build((error) => {
    if (error) throw error
    console.log('All done!')
  })

dogs没有文件;它只是我自己创建的一个数组。如何指示metalsmith-collections从阵列创建集合?

javascript arrays node.js static-site metalsmith
1个回答
1
投票

我之前没有使用过metalsmith-collections,但是查看文档here看起来该工具用于收集文件集合,而不是像你在这里尝试的那样获取数据。

传递给collections()的options对象应该为你想要的每个集合都有一个键(例如dogs),并且每个键应该是一个你想要的选项对象:pattern,这是一个用于拾取应该进入哪些文件的glob模式集合(似乎这可能是唯一必需的选项 - 其他似乎是可选的),sortBy,这是一个字符串,你可以按那样排序那些文件似乎从他们的元数据,reverse拉,这是一个布尔值,你可以用来与metadatalimitrefer以及这些文档中提到的其他一些内容相反。

要将此应用于您的用例,我可能建议将dogs/目录放在与您在此处共享的配置文件相同的位置,然后将rover.mddog.mddaisy.md放在dogs/目录中。然后你应该做桌子做这样的事情:

  // ...
  .use(collections({
    dogs: {
      pattern: 'dogs/*.md'
    }
  }))

那么*.md目录中的那些Markdown(dogs/)文件应该出现在你的dogs集合中。

© www.soinside.com 2019 - 2024. All rights reserved.