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

时间:2019-03-06 19:00:45

标签: javascript arrays node.js static-site metalsmith

我正在使用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从数组创建集合?

1 个答案:

答案 0 :(得分:1)

我以前没有使用过metalsmith-collections,但是看一下文档here似乎该工具是用来收集文件集合的,而不是像您想做的那样获取数据数组在这里。

您传递给collections()的options对象应该为您想要的每个集合都有一个键(例如dogs),并且这些键中的每一个都应该是带有您想要的选项的对象:{{1} },这是一种通用模式,用于选择应将哪些文件放入集合中(似乎可能是唯一的必需选项,而其他选项似乎是可选的),pattern,这是一个可以对这些文件进行排序的字符串似乎是从他们的元数据sortBy中提取出来的,这是一个布尔值,您可以使用它来反转排序,还有reversemetadatalimit和一些这些文档中提到的其他内容。

要将其应用于您的用例,我建议您在与您在此处共享的配置文件相同的位置创建一个refer目录,然后放置dogs/,{{1 }}和rover.md目录中的dog.md。然后,您应该在表中执行以下操作:

daisy.md

然后,dogs/目录中的那些Markdown( // ... .use(collections({ dogs: { pattern: 'dogs/*.md' } })) )文件应该出现在您的*.md集合中。