如何通过tsconfig配置避免tsc编译生成冗余目录及common文件夹?
解决方案
仅通过tsconfig.json配置可以实现扁平化输出和排除common目录的核心需求,不过package.json需要手动复制(TypeScript编译器本身不负责处理非TS文件的复制)。以下是具体配置修改和说明:
关键配置调整
修改后的tsconfig.json如下:
{ "compilerOptions": { "module": "CommonJS", "target": "ES2017", "noImplicitAny": true, "preserveConstEnums": true, "declaration": true, "baseUrl": "./", "outDir": "./built", "sourceMap": true, "rootDir": "./test/lambda/first/src", // 指定源文件根目录,消除嵌套结构 "paths": { "@utils/*": ["../../../common/layers/test2/*"] }, "esModuleInterop": true }, "include": ["./test/lambda/first/src/**/*"], // 仅包含需要编译的源文件 "exclude": ["node_modules", "common"] // 排除common目录和node_modules }
配置说明
- 扁平化输出:通过
rootDir指定源文件的根目录(即你的app.ts等业务文件所在的src目录),TypeScript会将该目录下的所有文件直接编译到outDir(built)中,不会保留原有的test/lambda/first/src嵌套层级。注意:
rootDir必须覆盖所有include范围内的TS文件,如果有文件不在该目录下,编译时会触发报错。 - 排除common目录:在
exclude数组中添加"common",确保tsc不会编译该目录下的任何文件,也不会将其内容输出到built目录。 - paths仅用于开发:
paths只是开发阶段的导入别名,tsc不会将../../../common/layers/test2/*对应的文件复制到built目录,编译后的代码会保留@utils/*的导入路径,只要云端环境能正确解析这个别名(比如云端已部署对应的common层),就能正常运行。
package.json的处理
tsc本身不负责复制非TS文件,要将根目录的package.json放到built目录下,可手动执行复制命令:
cp package.json ./built/
如果需要自动化,可将编译和复制命令合并到package.json的scripts中:
{ "scripts": { "build": "tsc && cp package.json ./built/" } }
内容的提问来源于stack exchange,提问作者Sweet
相关产品推荐
相关产品推荐

