You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eleventy重命名index.html为index.njk报错及reverse过滤器失效问题

问题根因

两个问题完全关联,核心是Eleventy未正确识别Nunjucks模板引擎:

  • 改后缀后抛出str.indexOf is not a function,是因为.njk文件没有匹配到Nunjucks编译流程,编译函数接收到的入参不是字符串类型,调用字符串原生方法indexOf时直接触发类型错误。
  • reverse过滤器失效是模板语法未被解析的连带问题,和过滤器本身无关,不需要单独注册自定义过滤器。
修复步骤

按以下顺序排查调整,不需要引入额外第三方依赖:

  1. 补全.eleventy.js的引擎映射配置
    你使用的eleventyone脚手架默认没有显式声明Nunjucks的文件映射规则,改后缀后Eleventy无法自动匹配正确的编译器。在配置的返回对象中补充以下字段,目录路径和你项目实际结构保持一致:
    module.exports = function(eleventyConfig) {
      // 原有配置(静态资源复制、自定义过滤器等)全部保留
    
      return {
        dir: {
          input: "src", // 替换为项目实际的源码输入目录
          includes: "_includes",
          data: "_data"
        },
        // 以下为必须补充的核心配置
        templateFormats: ["html", "njk", "md"],
        htmlTemplateEngine: "njk",
        markdownTemplateEngine: "njk"
      }
    };
    
  2. 校验index.njk的文件格式
    确认文件最开头没有多余空行、BOM头或者特殊字符,front matter必须从第一行开始书写,格式如下:
    ---
    layout: base.njk
    title: 首页
    ---
    <!-- 页面正文写在分隔线下方 -->
    
    Front matter格式不合法会导致Eleventy解析文件元数据失败,同样会触发类型错误。
  3. 检查文章集合配置
    reverse是Nunjucks内置的数组过滤器,引擎正常加载即可直接使用。如果配置完引擎后过滤器仍不生效,检查所有博客文章的front matter是否都添加了tags: post声明:collections.post集合只有在存在对应标签的内容时才会生成,集合本身不存在时过滤器调用自然失败。
    文章遍历的循环标签不需要额外加空白控制符,基础写法即可正常运行:
    {% for post in collections.post | reverse %}
      <article>
        <h2>{{ post.data.title }}</h2>
      </article>
    {% endfor %}
    
  4. 版本兼容处理
    以上步骤完成后仍报错的,检查本地Eleventy版本。eleventyone脚手架默认绑定0.x旧版本Eleventy,和新版Nunjucks语法存在兼容问题,执行以下命令升级到最新稳定版后重新构建:
    npm install @11ty/eleventy@latest --save-dev
    

内容的提问来源于stack exchange,提问作者CWebba1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:33:28