已安装私有包但Jest提示‘Cannot find module’问题求助
问题分析与解决方案
核心原因
你的私有包重构后发生了两个关键变化,导致Jest项目无法解析:
- 添加了
"type": "module",将包标记为纯ES模块,同时通过exports字段仅声明了ESM入口 - 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入口(如果需要兼容更多场景):
这需要你修改Vite配置,同时输出CommonJS格式的产物。"exports": { ".": { "import": "./build/my-package.js", "require": "./build/my-package.cjs" } }
内容的提问来源于stack exchange,提问作者Sebastian.M
相关产品推荐
相关产品推荐

