Headless Eleventy 11ty 未生成 post 文件,仅生成索引

Headless Eleventy 11ty not generating post files, only index

我正在尝试从 .md 文件转移到无头 CMS。

我正在关注 this tutorial,出于某种原因,我看到在索引文件 (blog/index.html) 上创建的帖子数据包含文章列表,但是 HTML不会生成每篇文章的文件 ,除非我在 dir.input 路径中的某处添加 .md 文件。

这是我的 .eleventy.js 文件的样子:

module.exports = function(eleventyConfig) {
    eleventyConfig.setLiquidOptions({
        dynamicPartials: false,
    });

    eleventyConfig.addLayoutAlias('default', 'layouts/default.html');
    eleventyConfig.addLayoutAlias('home', 'layouts/home.html');
    eleventyConfig.addLayoutAlias('post', 'layouts/post.html');
    
    return {
        dir: {
            input: './',
            output: './_site'
        },
        passthroughFileCopy: true
    };
};

这就是我的 _data/posts.js 文件的样子:

// fetch WordPress posts
const
  wordpressAPI = 'http://xxxxxx/wordpress/wp-json/wp/v2/posts',
  fetch = require('node-fetch');


// fetch number of WordPress post pages
async function wpPostPages() {
    try {
        const res = await fetch(`${ wordpressAPI }?_fields=id&page=1`);
        return res.headers.get('x-wp-totalpages') || 0;
    }
    catch(err) {
      return 0;
    }
}

// fetch list of WordPress posts
async function wpPosts(page = 1) {
    try {
      const
        res = await fetch(`${ wordpressAPI }?_fields=id,slug,date,title,excerpt,content&page=${ page }`),
        json = await res.json();
  
      return json
        .filter(p => p.content.rendered && !p.content.protected)
        .map(p => {
          return {
            slug: p.slug,
            date: new Date(p.date),
            dateYMD: dateYMD(p.date),
            dateFriendly: dateFriendly(p.date),
            excerpt: wpStringClean(p.excerpt.rendered),
            content: wpStringClean(p.content.rendered)
          };
        });
    }
    catch (err) {
      return null;
    }
}

//defining wpStringClean and other functions used above.
...

// process WordPress posts
module.exports = async function() {
    const posts = [];
    const wpPages = await wpPostPages();
    if (!wpPages) return posts;
  
    // fetch all pages of posts
    const wpList = [];
    for (let w = 1; w <= wpPages; w++) {
      wpList.push( wpPosts(w) );
    }

    const all = await Promise.all( wpList );
    
    return all.flat();
};

我的 _includes/layouts/post.html 包含这个:

---
layout: default
author: Me
pagination:
  data: posts
  alias: post
  size: 1
permalink: "/blog/{{ post.slug | slug }}/index.html"
---
...

我错过了什么? 为什么 11ty 需要一个 md 文件来为每个帖子创建文件?

您可能想尝试将分页从布局模板中移出并移到源目录中。看起来你的分页键在 _includes/layouts 中,Eleventy 不会将其作为输出文件处理。

尝试将您的 _includes/layouts/post.html 文件移动到您的输入目录(在本例中是您的项目根目录,./post.html),分页应该可以正常工作。