TypeScript项目存在多个独立tsconfig时测试文件如何导入源码文件?
具体修改方案
你已经添加的references配置是正确的,只需要在test/tsconfig.json的compilerOptions中补充路径映射规则即可实现需求:
{ "compilerOptions": { "module": "commonjs", "outDir": "../libtest", "strict": false, "composite": true, "sourceMap": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, // 新增以下配置 "baseUrl": ".", "paths": { "./*": [ "../src/*", "./*" ] } }, "include": [ "**/*.ts" ], // 保留你之前添加的src项目引用 "references": [ { "path": "../src" } ] }
配置说明
baseUrl设为test目录作为所有相对导入的基准路径paths规则会将当前目录下的相对导入请求,优先匹配src目录下的对应文件,再匹配test目录下的文件,刚好符合你写的import { Downloader } from "./downloader"的导入逻辑,直接定位到src/downloader.ts源码文件references配置保证TypeScript增量编译时,src代码修改后会自动同步更新测试编译依赖,不会读取旧的编译产物
如果运行测试时(比如用jest、mocha、ts-node等工具)仍然提示模块不存在,需要同步给运行工具配置对应的路径映射规则:
- 若使用jest,在
jest.config.js中添加:
module.exports = { moduleNameMapper: { '^./(.*)$': ['<rootDir>/src/$1', '<rootDir>/test/$1'] } }
- 若使用ts-node直接运行测试,启动命令添加
--tsconfig test/tsconfig.json参数,或安装tsconfig-paths插件加载tsconfig的路径配置。
内容的提问来源于stack exchange,提问作者Daniel Kaplan
相关产品推荐
相关产品推荐

