我正在使用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
从阵列创建集合?
我之前没有使用过metalsmith-collections
,但是查看文档here看起来该工具用于收集文件集合,而不是像你在这里尝试的那样获取数据。
传递给collections()
的options对象应该为你想要的每个集合都有一个键(例如dogs
),并且每个键应该是一个你想要的选项对象:pattern
,这是一个用于拾取应该进入哪些文件的glob模式集合(似乎这可能是唯一必需的选项 - 其他似乎是可选的),sortBy
,这是一个字符串,你可以按那样排序那些文件似乎从他们的元数据,reverse
拉,这是一个布尔值,你可以用来与metadata
,limit
,refer
以及这些文档中提到的其他一些内容相反。
要将此应用于您的用例,我可能建议将dogs/
目录放在与您在此处共享的配置文件相同的位置,然后将rover.md
,dog.md
和daisy.md
放在dogs/
目录中。然后你应该做桌子做这样的事情:
// ...
.use(collections({
dogs: {
pattern: 'dogs/*.md'
}
}))
那么*.md
目录中的那些Markdown(dogs/
)文件应该出现在你的dogs
集合中。