我有一个博客类型的网站,我一直在做,它几乎已经完成了。我使用过Eleventy,现在我连接了Netlify CMS,这需要我重组一些数据。
NetlifyCMS要求我为关系小部件数据(在本例中为作者(提供单独的文件。因此,我有一个authors目录,目前有3个json文件:jbloggs.json等,每个对象都是平面的,一个例子是:
/src/_data/authors/jbloggs.json
{
"key": "jbloggs",
"name": "Joe Bloggs",
// ... Removed for brevity
}
我最初创建了一组对象,一切都很好:
/src/authors.json
[
{
"key": "jbloggs",
"name": "Joe Bloggs",
// ... Removed for brevity
},
{
"key": "user2",
"name": "User Two",
// ... Removed for brevity
}
]
我需要做的是获取authors目录中的任意多个文件,并将每个文件中的对象添加到authors.json文件中的数组中。我尝试过使用json-concat,但没有成功。我的eleventy文件中需要fs和json concat:
const files = [];
const {resolve} = require('path');
const source = resolve('./src/_data/authors');
const target = resolve('./src/authors.json');
fs.readdirSync(source).forEach((file) => {
files.push(file);
})
jsonConcat({ src: files, dest: target }, function (json) {
console.log(files); // returns an array of the correct filenames
console.log(target); // returns the path to the target file /Users/darrenlee/Desktop/WebApp/src/authors.json
console.log(json); // returns null
});
在我的终端中,我还得到了:[11ty]文件已更改:src/authors.json,但文件没有更改,我仍然只有两个作者,目的是从authors目录文件中获得所有作者(目前为3个(。
如有任何帮助,我们将不胜感激。
谢谢
事实证明,我过于复杂了,根本不需要添加到authors.json文件中。
事实上,我现在已经删除了那些文件,因为我刚刚创建了一个新的集合:
eleventyConfig.addCollection("contributors", author => Object.values(author.items[0].data.contributors));
现在,我不再调用我的authors
全局数据,而是简单地调用Nunjucks模板中的collections.contributors
。和往常一样,可能有一种更干净的方式,但我有现有的过滤器,可以显示选定作者的所有指南和他们的简历等。
它运行得很好,所以现在它已经发货了,如果我能弄清楚的话,也许我会尝试在以后不创建额外系列的情况下复制它。