-
Notifications
You must be signed in to change notification settings - Fork 2
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
首次启动后,变更service文件,没有触发热更新,应该是碰到了时序问题 #16
Comments
我提交了pr 修复这个问题 #17、 |
一开始是没有 alias 逻辑的,这个时候很简单只需要 tsc --watch执行就行,工具都不需要跟踪文件变化,随着 alias path的加入,就越来越复杂了。 在包含 alias 文件重启的场景上,修改 ts,tsc 编译为 js,触发 tsc-alias 再次将 dist/js 文件修改,这个时候需要有个 flag 做判断,isCompileSuccess 在这里就是干这个用的,不然会和 chokidar.watch 死循环。 此外,原本是不需要 fileChangeList 的,因为现在重启比较频繁,后面是计划做单个文件修改的热重载的,不需要完整重启项目,所以我需要知道变化了哪个文件,判断是否需要完全的重启,不过这个还需要框架支持,现在 cli 工具里提前预支持了。 另外,删除没触发,可能是因为 chokidar 有 bug,windows 上不支持啥的,毕竟 tsc 也不支持删除的事件监听,我理解是一个原理(不然 tsc 早实现了) |
如果想拿到变更文件 是不是直接给 tsc 加上 --listEmittedFiles 读取输出即可,没有必要这么复杂。 |
我的思路是, tsc 读取到--watch 就加上 --listEmittedFiles参数 去掉fileChange文件监听。 |
可以的,listEmittedFiles 这个我觉得有用,之前就是没找到这个参数,另外,alias的替换单文件的 api 不太好用,你也可以试试。 另外注意 windows 的兼容性。。。坑比较多 |
个人认为这个工具集成 理想状态: {
"scripts": {
"alias": "tsc-alias",
"dev": "tscx --copyfiles --watch --script alias --exec bootstrap.js"
},
"devDependencies": {
"tsc-alias": "^1.8.8",
"@rnm/tscx": "^0.1.3"
}
} 可以参考我的实现:https://github.com/rnmjs/tscx ,希望对你们有帮助 |
tsc-alias一开始是没有加的,但是前端对alias 的依赖性实在太大了,考虑到兼容性还是加上了 |
@yuntian001 试试这个版本 [email protected] |
1、这个版本解决了,首次不更新的问题
如果是删除文件夹或者资源文件这里是没问题的,但是如果是删除ts文件p传入的是源文件名 例如 |
感觉这里的思路有问题
onWatchCompileSuccess
设置isCompileSuccess = true;
onFileChange
设置fileChangeList
,这俩函数都触发restart
在
restart
里边判断fileChangeList.length >0 && isCompileSuccess
则执行。这样解决时序问题。而不是在onFileChange
调用restart
时加isCompileSuccess
判断2、 当删除文件或文件夹后没有触发restart
应该是因为删除时fileChangeList.length是0所以直接return出来了,正常情况删除应该和修改一块操作单纯的删除不触发,理论上也没问题,不知道官方是不是这样考虑的。
The text was updated successfully, but these errors were encountered: