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

Vue3+TS+Jest使用Pinia报模块外无法使用import语句错误

问题根因

报错本质是Jest默认运行在CommonJS环境,不会转译node_modules下的ESM格式代码,加上配置存在明显错误,导致Pinia、vue-demi的ESM代码直接被Node执行触发语法错误,具体问题点:

  • jest.config.js中重复定义了两次transform字段,JS对象同名键会以后面的为准,最开始写的vue-demi转译规则被完全覆盖,根本没有生效
  • 原有transform规则只处理.ts和.vue后缀文件,没有覆盖node_modules下依赖的.js格式ESM文件
  • transformIgnorePatterns规则写法零散,没有正确把需要转译的Pinia相关依赖加入转译白名单
  • 部分场景下vue-demi没有正确切换到Vue3适配版本,也会触发兼容问题
修复步骤
  1. 替换原有jest.config.js为以下正确配置,删除重复字段,合并转译规则:
module.exports = {
  moduleFileExtensions: ["js", "ts", "json", "vue"],
  testEnvironment: "jsdom",
  transform: {
    "^.+\\.ts$": "ts-jest",
    "^.+\\.vue$": "@vue/vue3-jest",
    "node_modules/(pinia|vue-demi|@pinia/testing)/.+\\.(j|t)s?$": "ts-jest"
  },
  transformIgnorePatterns: [
    "<rootDir>/node_modules/(?!(pinia|@pinia/testing|vue-demi|@vue/test-utils)/)"
  ],
  moduleNameMapper: {
    "^vue$": "vue/dist/vue.cjs.js"
  }
};
  1. 执行以下命令,手动将vue-demi切换到Vue3适配版本,避免版本适配错误:
npx vue-demi-switch 3
  1. 重新运行单元测试命令即可,不需要修改业务代码或tsconfig配置,生产构建流程不受任何影响。
配置说明
  • 合并后的transform规则不会再出现覆盖问题,会正确转译白名单内node_modules依赖的js/ts文件
  • 统一的transformIgnorePatterns规则会跳过其他node_modules包的转译,保证测试运行速度,仅转译Pinia相关的ESM依赖
  • moduleNameMapper配置强制Jest加载Vue的CommonJS版本,避免ESM格式的Vue入口触发同类import错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:12:28