-
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
father build 输出打包文件后,如果不修改代码,再次执行 father build 会丢失 .d.ts 文件 #644
Comments
+1 |
已回退 latest 版本到 4.1.9 |
@Carrotzpc 有空帮忙看下这个问题? |
好,我看下 |
查阅了下相关资料,感觉开启 incremental 有挺多问题的,开启后,第二次构建不会产出没有改动的文件,这样就导致了 issue 中的问题出现,为了修复这个问题,可以在第一次构建的时候用 father 的持久缓存,缓存下相关 dts 文件,不过有个问题是用户删除了某个源文件后,dts 缓存文件还在,可能可以通过其他方式做到用户删除源文件后,相应的 dts 缓存文件自动失效,不过整体实现起来成本不低,维护起来估计也会比较麻烦,我建议是不缓存 dts 文件,做全量构建比较靠谱@PeachScript incremental 相关 issue:microsoft/TypeScript#30602 |
@Carrotzpc 如果是在原来持久缓存的基础上 + merge incremental 的结果做输出可以满足简单 + 可靠两点吗;比如现在有 a.d.ts 的持久缓存且它需要重新构建,此时仍然做 incremental 构建,如果 incremental 产物中有 a.d.ts 就覆盖目前的缓存结果,如果没有 a.d.ts 就仍然使用缓存的结果,最后再写入磁盘 |
感觉不太可靠,比如 a.ts 源文件删除了,缓存中的 a.d.ts 该如何处理? |
目前所有持久缓存都没有做主动清理,会一直保留到用户重装 |
我的意思是缓存中如果 a.d.ts 一直存在的话,按照 ”持久缓存的基础上 + merge incremental“ 的思路,a.d.ts 还是会被写入到 dist 中 @PeachScript |
只有传入的文件才需要生成 d.ts,如果 a.ts 已经被删除了,那这里传入的列表中就不会有它,也就不会为它生成 d.ts:https://github.com/umijs/father/blob/v4.1.9/src/builder/bundless/dts/index.ts#L121 |
增量编译只会产生有变动的文件,我们每次构建要生成所有文件的话,需要从缓存的文件中找出所有的文件,缓存的文件里是包含 a.d.ts 的,如果非要加这个缓存的话,倒是可以通过传入的文件找到其对应的缓存,然后增量编译再覆盖有变动的部分,就是感觉这么实现意义大不大,构建速度没提升多少,代码复杂度倒是挺高的😂 |
把 |
先按照移除 |
不太赞成每次跑全量构建, |
可以找个大项目看看用 |
没有做过 benchmark,但有缓存和无缓存的区别还是很明显的,之前在 Umi 项目里验证过
是指 tsc watch d.ts 的生成,现在 watch 是 father 做的,再调用 ts 做编译,每次都是一个新的 Program 实例,肯定会有额外的开销
源码构建已经是 esbuild/swc/babel 了,但它们都不能生成 d.ts |
主要是想看用 |
我用 https://github.com/antvis/AVA/tree/master/packages/ava-react 作为例子对比了下,首次构建完成后,删除 dts 相关缓存: rm -rf node_modules/.cache/father/tsc node_modules/.cache/father/bundless-dts 在 ava-react 中再次执行构建: nr build 日志如下:
不做任何更改后,再次执行构建: nr build 日志如下:
两次构建结果对比如下:
因为构建 cjs 时,已经使用了构建 esm 时产生的缓存,这里只对比构建 esm 的耗时, |
蹲一个发布. 卡了这个问题 |
@innocces latest 已经回滚了,应该不影响;修复版这周发 |
v4.2.1 已发布,感谢 @Carrotzpc 的贡献 ❤️ |
复现:
npx create-father my-father-project
npx father build
再次执行 npx father build
The text was updated successfully, but these errors were encountered: