Eleventy没有向嵌套的index.md文件生成的索引文件添加html后缀

问题描述

Eleventy并未将html后缀添加到由嵌套index.md文件生成的索引文件中。

例如,这是包含我的源内容的示例目录结构...

|
+- /src (input dir)
    |
    +- post
    |   |
    |   +- my-cool-post
    |       |
    |       +- /images
    |       |
    |       +- index.md
    |
    +- index.md
    |
    +- about.md

然后我运行命令npx eleventy时,得到以下输出...

|
+- /public (output dir)
    |
    +- post
    |   |
    |   +- my-cool-post
    |       |
    |       +- /images
    |       |
    |       +- index <---- NOTE there is no ".html" suffix on this file
    |
    +- index.html <----- this file is ok however
    |
    +- about.html <----- and so is this file

这是我设置.eleventy.js配置文件的方式。

// Data Extensions
const yaml = require("js-yaml");

module.exports = function (eleventyConfig) {

  eleventyConfig.addPassthroughcopy("_assets");
  eleventyConfig.addWatchTarget("./src/_sass/");
  eleventyConfig.addDataExtension("yaml",contents => yaml.safeLoad(contents));
  eleventyConfig.setTemplateFormats([
    "md","css","jpg","png","webp","svg","html"
  ]);
  return {
    jsDataFileSuffix: ".11ty",dataTemplateEngine: "njk",htmlTemplateEngine: "njk",markdownTemplateEngine: "njk",passthroughFilecopy: true,dir: {
      input: "src",data: "_data",includes: "_includes",layouts: "_layouts",output: "public"
    }
  }
}

如果没有后缀*.html,则URL http://../post/my-cool-post将返回404错误。如果我手动添加*.html后缀,则它可以正常工作。

您知道我的设置有什么问题吗?

解决方法

我发现了问题所在。在上面的示例中,/src/post/post.yaml中有一个文件,具有以下值:

permalink: "{{ page.filePathStem }}"

我之所以要这样做,是为了创建一个别名permalink,我可以在模板中使用它,而不必键入{{ page.filePathStem }}。事实证明,permalink是保留的属性,显然会影响渲染输出。从文件中删除行即可解决此问题。