VSCode扩展开发中npm如何清理/重建已删除测试文件的残留产物
问题原因
TypeScript 默认的编译逻辑仅会增量更新当前存在的 .ts 源文件对应的编译产物,不会主动删除已被移除的源文件对应的 .js、.js.map 等残留文件。你用到的 npm run compile、npm run rebuild 默认没有前置清理产物目录的逻辑,就会导致已删除测试文件的 JS 产物依然存在,测试运行器扫描目录时会加载这些残留文件,执行已经不存在的测试用例。
解决方法
方法1:配置npm脚本前置清理(兼容性最好,推荐)
首先安装跨平台文件删除工具 rimraf,避免不同操作系统 rm 命令不兼容的问题:npm install rimraf --save-dev
然后修改 package.json 中的 scripts 配置:
{ "scripts": { "clean": "rimraf out", // 此处的out替换为你项目实际的编译产物输出目录 "compile": "npm run clean && tsc -p ./", "rebuild": "npm run clean && tsc -p ./ --build", "test": "npm run compile && 你的原有test执行逻辑" // 保持你原本的test命令后半段不变即可 } }
配置后每次执行编译、重构、测试命令前,都会先清空整个产物目录,再重新编译所有现存的TS文件,完全不会残留旧产物。
方法2:使用tsc自带的clean参数
如果你的项目使用 tsc --build 增量构建模式,可以直接给编译命令添加 --clean 参数,它会自动删除对应tsconfig项目下的所有编译产物,不需要额外安装工具:
{ "scripts": { "compile": "tsc --build --clean && tsc --build", "rebuild": "tsc --build --clean && tsc --build" } }
注意该方法仅适用于开启了增量构建模式的项目,未开启增量构建时不会生效。
方法3:配置tsconfig自动清理无对应源文件的产物
如果你使用的是TypeScript 4.9及以上版本,可以直接在tsconfig.json中开启自动清理配置:
{ "compilerOptions": { "rootDir": "./src", // 必须正确配置源码根目录,tsc才能对比产物和源文件的对应关系 "removeOldCompiledFiles": true } }
开启后增量编译时,tsc会自动删除没有对应.ts源文件的旧编译产物,不需要每次全量清空目录,编译速度更快。
内容的提问来源于stack exchange,提问作者DarkTrick
相关产品推荐
相关产品推荐

