Vitest绝对路径导入仅部分组件生效问题求助
问题原因与解决方案
核心问题
你碰到的情况是因为vitest的手动别名配置写法错误,@shared/*的字符串式别名没有正确匹配新文件的路径;而旧文件能生效是vite-node缓存了之前的解析结果,新文件无缓存所以暴露了别名配置的问题。单独加具体文件的别名时,路径完全匹配自然能正常工作。
解决方案
推荐两种修复方式,选其一即可:
方案1:复用tsconfig的paths配置(更省心)
直接在vitest配置中启用vite-tsconfig-paths插件,和vite保持一致,不用手动维护两份别名配置:
修改vitest.config.ts:
import { defineConfig } from "vitest/config"; import tsconfigPaths from 'vite-tsconfig-paths' export default defineConfig({ plugins: [tsconfigPaths()], // 启用插件复用tsconfig的paths test: { globals: true, environment: 'jsdom', } });
方案2:修正手动别名的正则匹配写法
如果坚持手动配置别名,需要用正则表达式来正确捕获通配符部分:
修改vitest.config.ts中的resolve.alias:
import { defineConfig } from "vitest/config"; import path from 'path' export default defineConfig({ resolve: { alias: [ {find: "@enums", replacement: path.resolve(__dirname, './src/shared/enums') }, {find: /^@components\/(.*)$/, replacement: path.resolve(__dirname, './src/components/$1') }, {find: /^@shared\/(.*)$/, replacement: path.resolve(__dirname, './src/shared/$1') }, ] }, test: { globals: true, environment: 'jsdom', } });
额外步骤:清理缓存
为了确保新配置生效,运行测试时加上--no-cache参数,或者删除node_modules/.vite-node文件夹清除缓存:
vitest --no-cache
内容的提问来源于stack exchange,提问作者kolman
相关产品推荐
相关产品推荐

