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

如何在Vitest中正确排除node_modules?解决模块导入报错

解决Vitest单元测试中"Cannot use import statement outside a module"报错

问题本质

你碰到的报错和exclude配置无关——exclude的作用是指定哪些文件不被当作测试文件,而非控制node_modules模块的转译逻辑。报错核心原因是access包使用了ES模块语法,但Vitest默认不会转译node_modules内的内容,导致Node.js将其当作CommonJS模块处理,触发语法错误。

解决方案

方案1:内联处理目标包

在Vitest配置中添加deps.inline,让Vitest对access包进行内联转译:

import { defineConfig, configDefaults } from 'vitest/config'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
    plugins: [vue()],
    test: {
        environment: 'happy-dom',
        globals: true,
        mockReset: true,
        restoreMocks: true,
        clearMocks: true,
        exclude: [
            ...configDefaults.exclude,
            '<rootDir>/node_modules/**'
        ],
        // 新增内联配置
        deps: {
            inline: ['access']
        }
    },
})

方案2:强制转译目标包

如果方案1无效,可通过transformInclude强制指定Vitest转译access包:

import { defineConfig, configDefaults } from 'vitest/config'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
    plugins: [vue()],
    test: {
        environment: 'happy-dom',
        globals: true,
        mockReset: true,
        restoreMocks: true,
        clearMocks: true,
        exclude: [
            ...configDefaults.exclude,
            '<rootDir>/node_modules/**'
        ],
        // 新增转译规则
        transformInclude: [
            /node_modules\/access/
        ]
    },
})

额外检查项

  • 查看access包的package.json:若它是ES模块,需确保包含"type": "module";若为CommonJS模块,应避免代码中使用ES import语法。
  • 确认测试文件中的导入路径无拼写错误。

内容的提问来源于stack exchange,提问作者Ricardo de Vries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:12:08