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

Eleventy集成SanityClient报错:sanityClient is not a function

解决Eleventy集成SanityClient时的"sanityClient is not a function"错误

问题根源

你的.eleventy.js存在两个核心问题:

  1. 重复的module.exports:文件中定义了两个导出函数,第二个会完全覆盖第一个,导致初始的模板格式、目录配置全部失效,同时代码执行顺序也会引发异常。
  2. Sanity客户端导入错误:当前版本的@sanity/client默认导出的是createClient而非sanityClient,直接调用sanityClient()会触发类型错误。

修复后的完整配置代码

// 正确导入Sanity客户端
const { createClient } = require('@sanity/client');

// 初始化Sanity客户端实例
const client = createClient({
  projectId: '7jyfzkcq',
  dataset: 'news_data',
  useCdn: true,
});

module.exports = function (eleventyConfig) {
  // 保留原有模板配置
  eleventyConfig.setTemplateFormats("njk");
  eleventyConfig.addPassthroughCopy("src/static");

  // 添加异步过滤器处理Sanity数据请求
  eleventyConfig.addAsyncFilter('getSanityData', async function(collectionName) {
    const query = `*[_type == '${collectionName}']`;
    const data = await client.fetch(query);
    return data;
  });

  // 返回目录配置
  return {
    dir: {
      input: "src",
      output: "_site"
    }
  };
};

关键修复点说明

  • 合并配置逻辑:将所有Eleventy配置放在同一个导出函数中,避免配置被覆盖丢失。
  • 修正Sanity导入方式:使用解构语法导入createClient,匹配当前@sanity/client的API规范。
  • 改用异步过滤器:因为数据请求是异步操作,使用Eleventy提供的addAsyncFilter替代普通addFilter,确保异步逻辑正确执行。

额外验证步骤

  1. 确认依赖安装正常:
npm install @sanity/client --save
  1. 运行前清理Eleventy缓存:
npx @11ty/eleventy --clean

内容的提问来源于stack exchange,提问作者Ѕαηյϊτн Ѕθмαη

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:50:26