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

在NestJS服务中注入Sanity客户端报client_1.default不是函数错误如何解决

错误原因

错误本质是@sanity/client包的导出规范与当前导入写法不匹配:

  • v3.0.0及以上版本的@sanity/client已经完全移除默认导出,仅提供命名导出的createClient方法用于客户端初始化,你当前使用默认导入语法拿到的实际是undefined,调用时就会抛出default is not a function的错误
  • 即便你配置了allowSyntheticDefaultImports: true,该配置仅支持TS类型层面兼容默认导入非ES模块,无法解决运行时CommonJS加载无default导出包的实际执行错误。
解决方案

场景1:使用v3+版本的@sanity/client(推荐)

直接改用官方提供的命名导出createClient即可,修改后代码如下:

import { Injectable } from '@nestjs/common';
import { createClient, SanityClient } from '@sanity/client';

@Injectable()
export class SanityService {
  public readonly client: SanityClient = createClient({
    projectId: '******',
    dataset: '********',
    apiVersion: '2021-08-18',
    token: '*******',
    useCdn: false,
  });
}

场景2:使用v2及更早版本的@sanity/client

调整导入语法为全量导入后访问default属性:

import { Injectable } from '@nestjs/common';
import * as sanityClient from '@sanity/client';
import type { SanityClient } from '@sanity/client';

@Injectable()
export class SanityService {
  public readonly client: SanityClient = sanityClient.default({
    projectId: '******',
    dataset: '********',
    apiVersion: '2021-08-18',
    token: '*******',
    useCdn: false,
  });
}

内容的提问来源于stack exchange,提问作者Erland Glad Solstrand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:15:03