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

jest运行报错:无法找到模块'jose-node-cjs-runtime/jwt/sign'如何解决?

问题原因

你本地正常运行服务不报错是因为Node.js 12+版本原生支持package.json中exports字段定义的子路径导出规则,但你当前使用的jest@27版本默认未开启对exports字段的解析支持,因此无法识别jose-node-cjs-runtime的子路径导入,抛出找不到模块的错误。

解决方案

以下三个方案任选其一即可:

方案1:调整导入语句(改造成本最低)

直接修改src/models/user.js中的导入逻辑,不需要配置jest,所有运行环境都兼容:
把原来的子路径导入:

const { SignJWT } = require('jose-node-cjs-runtime/jwt/sign');

修改为从根包直接导入:

const { SignJWT } = require('jose-node-cjs-runtime');

jose系列包的所有公开API都支持从根包直接引入,无需使用子路径导入。

方案2:配置jest模块映射(不想改业务代码可选)

在package.json的jest配置段中添加子路径映射规则,让jest能正确找到对应文件:

{
  "jest": {
    "testEnvironment": "node",
    "roots": ["<rootDir>"],
    "modulePaths": ["<rootDir>"],
    "moduleDirectories": ["node_modules"],
    // 新增下面这段配置
    "moduleNameMapper": {
      "^jose-node-cjs-runtime/(.*)$": "<rootDir>/node_modules/jose-node-cjs-runtime/dist/cjs/$1"
    }
  }
}

方案3:升级jest到28及以上版本

jest从28版本开始默认支持package.jsonexports字段的解析,升级后不需要修改任何业务代码和配置即可正常运行测试,升级命令:

npm install jest@latest --save-dev

修改完成后重新执行测试脚本即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:51:04