-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: declaration generation error (#733) #743
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #743 +/- ##
==========================================
+ Coverage 94.45% 94.53% +0.07%
==========================================
Files 55 55
Lines 1570 1591 +21
Branches 358 362 +4
==========================================
+ Hits 1483 1504 +21
Misses 87 87 ☔ View full report in Codecov by Sentry. |
@PeachScript 烦请 review 这个 PR,看看是否可以合并? |
感谢贡献,看了下 PR 提供的方案有些复杂,希望 dts 生成尽量在自己的模块里处理完整,外部只关心写文件即可 想到个思路你看看是否可行:outputFiles 的过滤来源从 inputFiles 改成 inputFiles + cache,也就是说只要该文件变更引起的关联文件此前已经编译过了,那么就判定为有效输出 比如有 a.ts、b.ts 两个文件,初次编译时两者都会作为 inputFiles 传入,然后同时存入 cache,此时 a.ts 文件变更影响了 b.d.ts,通过判断 inputFiles ( |
利用初次编译的 cache 来确定有效输出文件的范围,确实会更好点。当前方案最初确实是以 仅修改 dts 的 output 为目标,只是没想到兜不住范围泄漏到了 bundless/index 上 我晚些时候按照这个思路修改一下 感谢指出 🙏 |
在 dts 模块内 能给将 father/src/builder/bundless/index.ts Lines 84 to 88 in 1d6debf
father/src/builder/bundless/index.ts Lines 127 to 133 in 1d6debf
这样就回到了如何得到输出的 |
在 cjs/esm 同时存在的情况下,会因为 ts 的增量编译而跳过 如果仅用 inputFiles 作为缓存初始值 可能存在某个 bundless 输出不全的问题
因为声明文件的输出范围可能没有经过输入文件的范围,只有输入文件范围才做过目录的创建 所以对于那些不在 declarationFileMap 中的文件 再次做一次 ensureDirSync
修改了 dts 的生成逻辑,放宽了 output 的约束,不再限制在 inputFiles 之中,因为类型的变更可能会影响多个文件
由于修改了 dts 生成逻辑,所以影响了 bundless 处写入文件的逻辑:忽略掉无法计算出 dist 输出目录的声明文件