我正在使用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
从数组创建集合?
答案 0 :(得分:1)
我以前没有使用过metalsmith-collections
,但是看一下文档here似乎该工具是用来收集文件集合的,而不是像您想做的那样获取数据数组在这里。
您传递给collections()
的options对象应该为您想要的每个集合都有一个键(例如dogs
),并且这些键中的每一个都应该是带有您想要的选项的对象:{{1} },这是一种通用模式,用于选择应将哪些文件放入集合中(似乎可能是唯一的必需选项,而其他选项似乎是可选的),pattern
,这是一个可以对这些文件进行排序的字符串似乎是从他们的元数据sortBy
中提取出来的,这是一个布尔值,您可以使用它来反转排序,还有reverse
,metadata
,limit
和一些这些文档中提到的其他内容。
要将其应用于您的用例,我建议您在与您在此处共享的配置文件相同的位置创建一个refer
目录,然后放置dogs/
,{{1 }}和rover.md
目录中的dog.md
。然后,您应该在表中执行以下操作:
daisy.md
然后,dogs/
目录中的那些Markdown( // ...
.use(collections({
dogs: {
pattern: 'dogs/*.md'
}
}))
)文件应该出现在您的*.md
集合中。