在跟踪 #2254 问题时想看下为啥引入的 less 文件变化时没有重新编译,发现有如下问题:
第一个是,wxs 被解析时会改变 wpy 文件的缓存 hash。
我看到源码中 @wepy/cli/core/plugins/parser/wxs.js
这个文件里有这样写:
这样会导致 @wepy/cli/core/plugins/parser/wpy.js
中关于文件 hash 一致的判断失效,所以 #2254 中描述的——“当 wpy 文件里有 wxs 时,改变被引入的 less 文件会重新编译;当没有 wxs 时,则改变 less 没有效果”这一现象会出现。但这里有问题的就是 wxs 的解析改变了文件缓存的 hash,那么这些有 wxs 的文件缓存就全部无效了,每次都会重新编译。
第二个是,看到在 @wepy/cli/core/compile.js
文件的 watch()
方法中,有关于清除编译缓存 hash 的代码:
看变量的命名判断,貌似是根据被改变文件找到涉及文件,并清除涉及文件的 hash 使之能重新编译。但从调试的情况来看, this.involved
这个 map 里的 value 值都是 1
,并不会执行到清除 hash 的代码?
按我的理解,像 less 这种有可能会被多个 wpy 文件引用,所以引用关系 involved
需要是一个数组来记住,等待 less 发生变化时清除这些 wpy 文件的缓存 hash。因为不知道作者的设计思路所以也不好瞎猜,希望作者能说明一下设计思路或者给一些文档,这样大家也好 PR 哈。@Gcaufy
1条答案
按热度按时间vdgimpew1#
对于2这个问题你可以做个简单的测试验证一下就知道了。。。。
最后,非常感谢你的耐心研究,也期待你的PR。 有问题可以在群里直接跟我讨论。