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

TypeScript默认导入weaviate-ts-client报错,配置排查求助

解决weaviate-ts-client的TypeScript配置冲突问题

问题根源

这是典型的ES模块(ESM)与CommonJS(CJS)互操作不兼容导致的问题,核心矛盾在于weaviate-ts-client的导出格式是CJS风格,但你的TypeScript配置与项目模块模式不匹配:

  • 默认导入报错是因为TS的类型校验认为该包没有默认导出的client属性(实际包用module.exports导出,TS按ESM解析时无法识别);
  • 手动加.default运行报错,是因为ESM环境下CJS包的默认导出包装逻辑与你的配置不兼容,导致default属性未定义;
  • 改moduleResolution: 'node'后出现exports is not defined,是因为项目是ESM模式(package.json设了"type": "module"),但node解析模式强制按CJS逻辑处理,引发环境冲突。

解决方案

方案1:使用命名导入(最稳妥)

直接适配包的实际导出结构,用命名导入替代默认导入:

import { client } from 'weaviate-ts-client';

// 正常初始化客户端
const clientInstance = client({
  scheme: 'http',
  host: 'localhost:8080'
});

这种方式完全避开了ESM/CJS互操作的坑,类型校验和运行时都不会有问题。

方案2:同步TS配置与项目模块模式

如果坚持用默认导入,根据项目的模块模式调整tsconfig.json:

情况A:项目是CommonJS模式(package.json无"type": "module")

{
  "compilerOptions": {
    "module": "CommonJS",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}

开启esModuleInterop和allowSyntheticDefaultImports后,TS会自动处理CJS包的默认导入,直接用import weaviate from 'weaviate-ts-client'即可调用weaviate.client(...),无需加.default。

情况B:项目是ESM模式(package.json有"type": "module")

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}

bundler解析模式更适配现代打包工具和ESM环境,此时默认导入无需加.default,直接调用weaviate.client(...)即可。

方案3:修正package.json的模块模式

确保package.json的type字段与TS的module字段一致:

  • 不要同时设置"type": "module"和"module": "CommonJS",这会导致Node.js和TS的模块解析逻辑冲突,引发exports is not defined这类错误。

验证步骤

  1. 运行tsc --noEmit检查类型是否通过;
  2. 执行代码验证运行时是否报错;
  3. 可打印模块结构确认导出逻辑:
import * as weaviate from 'weaviate-ts-client';
console.log(weaviate); // 查看client属性的实际位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:53:21