Tencent / wepy

小程序组件化开发框架
https://wepyjs.gitee.io/wepy-docs/
Other
22.5k stars 3.05k forks source link

关于 wepy-cli 下子组件改动DOM保存后,需要再更新父组件才能刷新的问题,根据源码提出疑问。 #1667

Open ssly opened 6 years ago

ssly commented 6 years ago

Description

wepy-cli编译问题,有时候目录结构如下,father 里面引入了 child.wepy,在修改 child.wepy 的 DOM 时,页面不能同步更新 DOM 结构,必须在 father 里面保存才可正常更新DOM

└── page
    ├── child.wpy
    └── father.wpy

Environment

Reproduce

必现

Observed Results

修改了child.wpy的DOM结构,触发微信更新之后,无法即使同步,必须更新父的 xxx.wpy,才能正常同步

Expected Results

修改了child.wpy的DOM结构,能立即同步

Relevant Code / Logs

根据wepy-cli源码wepy-cli/src/compile.js

  1. 发现如果child.wpy在文件夹名包含 components 的下面,才能正常更新
  2. 如果 child.wpy 在 modules 文件夹下面,可对源码做如下修改
// 原代码
            } else if (file.indexOf('components') !== -1) {
                var parents = this.findParents(file);
                files = parents.concat([file]);
            }

// 修改为
            } else if (/components|modules/ig.test(file)) {
                var parents = this.findParents(file);
                files = parents.concat([file]);
            }

期望了解

这个关于子组件不实时刷新的问题,期望如何解决? 关于这里设置了 compoennts 文件夹下的文件,能够被刷新,是临时方案吗?

ssly commented 6 years ago

@Gcaufy 这个问题,后续有没有什么想法呢?

linbinhuang commented 6 years ago

事实上子组件在components下,虽然能够被刷新,但微信开发者工具还是报出现脚本错误或者未正确调用 Page(),重新保存了引用子组件的页面后才不报错。

ssly commented 6 years ago

@linbinhuang 这个是不是关闭一下微信的开发工具,然后重新打开就能好?

hukangyu520 commented 5 years ago

也遇到这个问题了,暂时的解决方法, 在page处加个空格,重新保存一下,就生效了。期待官方解决