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

已安装私有包但Jest提示‘Cannot find module’问题求助

问题分析与解决方案

核心原因

你的私有包重构后发生了两个关键变化,导致Jest项目无法解析:

  1. 添加了"type": "module",将包标记为纯ES模块,同时通过exports字段仅声明了ESM入口
  2. Jest默认配置会忽略node_modules目录下的文件转译,而你的私有包现在的ESM语法无法被Jest直接识别(即使使用了default-esm预设)

具体修复步骤

1. 让Jest转译你的私有包

修改Jest配置的transformIgnorePatterns,将@myRegistry/my-package从忽略转译的列表中排除:

module.exports = {
  // ...其他配置
  transformIgnorePatterns: ['/node_modules/(?!@myRegistry/my-package)/']
}

这个正则的作用是:node_modules下除了@myRegistry/my-package之外的所有包都跳过转译,确保你的私有包会被ts-jest处理。

2. 优化Jest的ESM支持

在Jest配置中添加以下字段,明确告知Jest如何处理ESM模块:

module.exports = {
  // ...其他配置
  extensionsToTreatAsEsm: ['.ts', '.js'],
  globals: {
    'ts-jest': {
      useESM: true
    }
  }
}

3. 验证私有包的构建产物

确认你的私有包发布后,build目录下的文件完整:

  • my-package.js(ES模块产物)
  • index.d.ts(类型定义文件)
    同时检查package.json的files字段包含"build",确保这些文件被正确发布。

4. 清理Jest缓存

运行以下命令清除Jest的缓存,避免旧的模块解析结果干扰:

jest --clearCache

额外建议

如果上述步骤仍未解决问题,可以尝试:

  • 在私有包的exports字段中添加CommonJS入口(如果需要兼容更多场景):
    "exports": {
      ".": {
        "import": "./build/my-package.js",
        "require": "./build/my-package.cjs"
      }
    }
    
    这需要你修改Vite配置,同时输出CommonJS格式的产物。

内容的提问来源于stack exchange,提问作者Sebastian.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:25:45