Eleventy集成SanityClient报错:sanityClient is not a function
解决Eleventy集成SanityClient时的"sanityClient is not a function"错误
问题根源
你的.eleventy.js存在两个核心问题:
- 重复的
module.exports:文件中定义了两个导出函数,第二个会完全覆盖第一个,导致初始的模板格式、目录配置全部失效,同时代码执行顺序也会引发异常。 - 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,确保异步逻辑正确执行。
额外验证步骤
- 确认依赖安装正常:
npm install @sanity/client --save
- 运行前清理Eleventy缓存:
npx @11ty/eleventy --clean
内容的提问来源于stack exchange,提问作者Ѕαηյϊτн Ѕθмαη
相关产品推荐
相关产品推荐

