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

Vue+TS项目使用Vitest测试时json-big依赖解析失败求助

Vue+TypeScript+Vite项目Vitest测试报错:无法解析json-big包入口

问题

项目正常运行,但执行vitest run时抛出错误,提示无法解析json-big包的入口,认为其package.json的main/module/exports配置存在问题。

已尝试操作:

  • 调整Vite配置中Vitest相关选项
  • 删除node_modules后重新安装

运行环境:

  • Node v16.16.0
  • npm v8.17.0
  • Linux Mint (Vanessa)

相关配置文件

package.json

{
  "name": "vite-vue-typescript-starter",
  "version": "0.1.4",
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build --base /smgreenhousemanager",
    "test": "vitest run --coverage",
    "format": "prettier --write .",
    "typecheck": "vue-tsc --noEmit"
  },
  "dependencies": {
    "@pixi/math-extras": "^6.4.2",
    "axios": "0.25.0",
    "json-big": "^1.0.2",
    "lodash": "^4.17.21",
    "mitt": "^3.0.0",
    "pinia": "^2.0.13",
    "pixi-viewport": "^4.34.4",
    "pixi.js": "^6.4.2",
    "pixi.js-keyboard": "^1.1.6",
    "pixi.js-mouse": "^1.1.6",
    "ts-toolbelt": "^9.6.0",
    "uuid": "^8.3.2",
    "vue": "^3.2.26"
  },
  "devDependencies": {
    "@types/lodash": "^4.14.182",
    "@types/node": "^18.6.2",
    "@types/uuid": "^8.3.4",
    "@vitejs/plugin-vue": "^2.2.0",
    "@vitest/coverage-c8": "^0.22.0",
    "@vue/compiler-sfc": "^3.2.23",
    "happy-dom": "^6.0.4",
    "jsdom": "^20.0.0",
    "typescript": "^4.5.4",
    "vite": "^2.8.0",
    "vitest": "^0.22.0",
    "vue-tsc": "^0.29.8"
  }
}

vite.config.ts

// https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html#-reference-types-
/// <reference types="vitest" />

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import process from "process"

const httpPort: string = process.env.HTTP_PORT || '8069' // This parallels our backend declaration in service.py.
const backendUrl: string = process.env.BACKEND_URL || `localhost:${httpPort}`

export default defineConfig({
    plugins: [vue()],
    define: {
        'BACKEND_URL': `"${backendUrl}"`
    },
    build: {
        target: 'esnext'
    },
    test: {
        environment : "happy-dom"
    }
})

utils.test.ts

import { expect, test } from 'vitest'
import {Rectangle} from "pixi.js";
import {normaliseRectangleShape} from "../lib/utils";

test('normalised rectangle nominal', () => {
    const rect = new Rectangle(0, 0, 50, 50)
    const normalised = normaliseRectangleShape(rect)

    expect(normalised.x).toBe(0)
    // expect(normalised).toHaveProperty('y', 0)
    // expect(normalised).toHaveProperty('width', 50)
    // expect(normalised).toHaveProperty('height', 50)
})

报错信息

/usr/local/bin/npm test

> vite-vue-typescript-starter@0.1.4 test
> vitest run


 RUN  v0.22.0 /home/chuck/PyCharm/smgreenhousemanager

 ❯ frontend/src/tests/utils.test.ts (0)

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Suites 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

 FAIL  frontend/src/tests/utils.test.ts [ frontend/src/tests/utils.test.ts ]
Error: Failed to resolve entry for package "json-big". The package may have incorrect main/module/exports specified in its package.json: Failed to resolve entry for package "json-big". The package may have incorrect main/module/exports specified in its package.json.
 ❯ packageEntryFailure node_modules/vite/dist/node/chunks/dep-689425f3.js:40970:11
 ❯ resolvePackageEntry node_modules/vite/dist/node/chunks/dep-689425f3.js:40966:9
 ❯ tryNodeResolve node_modules/vite/dist/node/chunks/dep-689425f3.js:40773:20
 ❯ Context.resolveId node_modules/vite/dist/node/chunks/dep-689425f3.js:40581:28
 ❯ Object.resolveId node_modules/vite/dist/node/chunks/dep-689425f3.js:39254:55
 ❯ TransformContext.resolve node_modules/vite/dist/node/chunks/dep-689425f3.js:39028:23
 ❯ normalizeUrl node_modules/vite/dist/node/chunks/dep-689425f3.js:58354:34
 ❯ TransformContext.transform node_modules/vite/dist/node/chunks/dep-689425f3.js:58509:57
 ❯ Object.transform node_modules/vite/dist/node/chunks/dep-689425f3.js:39317:30

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯

Test Files  1 failed (1)
     Tests  no tests
  Start at  15:52:06
  Duration  1.11s (setup 0ms, collect 0ms, tests 0ms)


Process finished with exit code 1

解决方案

方案1:替换为维护更活跃的json-bigint包

json-big包的维护已经停滞,其package.json不符合现代模块解析规范。推荐改用json-bigint,它是前者的活跃分支,API完全兼容:

npm uninstall json-big
npm install json-bigint

之后将项目中所有import JSONBig from 'json-big'替换为import JSONBig from 'json-bigint'即可。

方案2:手动指定json-big的入口路径

如果不想更换依赖,可以在vite.config.ts中添加别名,强制指定json-big的入口文件:

export default defineConfig({
  // ...其他原有配置
  resolve: {
    alias: {
      'json-big': 'json-big/lib/json-big.js'
    }
  },
  test: {
    environment : "happy-dom"
  }
})

方案3:升级Vite和Vitest版本

当前使用的Vite@2.8.0和Vitest@0.22.0版本较旧,可能存在模块解析的兼容性问题。尝试升级到兼容的新版本:

npm update vite vitest @vitejs/plugin-vue

升级后注意检查配置是否需要调整(比如Vitest的环境配置、类型定义等)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:06:15