如何在TypeScript项目中分离src/与test/目录?
TypeScript项目分离源码与测试代码的最佳方案
针对你遇到的问题——生产编译时不想暴露test目录,但测试文件无法导入test内部工具,最清晰可靠的方案是使用两个TypeScript配置文件,分别对应生产编译和测试场景:
1. 保留生产编译用的tsconfig.json
保持你原有的配置不变,确保仅编译src目录内容,输出到dist,避免test代码被打包或对外暴露:
{ "extends": "../../tsconfig.build.json", "compilerOptions": { "baseUrl": ".", "outDir": "dist", "rootDir": "./src", "composite": true }, "include": ["src/**/*"] }
2. 创建测试专用的tsconfig.test.json
新增这个配置文件,用于测试环境的类型检查和模块解析,允许TypeScript识别src和test两个目录:
{ "extends": "./tsconfig.json", "compilerOptions": { "rootDir": ".", "noEmit": true // 测试无需单独编译输出,仅做类型检查 }, "include": ["src/**/*", "test/**/*"] }
3. 配置测试工具使用该配置
将你的测试运行工具(如Jest、Vitest)指向这个测试专用配置。比如在Jest配置中添加:
// jest.config.js module.exports = { // 其他配置... globals: { 'ts-jest': { tsconfig: './tsconfig.test.json' } } }
如果用Vitest,可在vite.config.ts中指定:
// vite.config.ts import { defineConfig } from 'vitest/config' export default defineConfig({ test: { // 其他配置... tsconfig: './tsconfig.test.json' } })
为什么这个方案最优?
- 生产编译完全隔离test目录,符合你不对外暴露测试代码的需求
- 测试环境能正常解析
test内部的工具文件,解决导入报错问题 - 通过继承配置,避免重复编写基础编译选项,保持配置一致性
内容的提问来源于stack exchange,提问作者Sasgorilla
相关产品推荐
相关产品推荐

