midway icon indicating copy to clipboard operation
midway copied to clipboard

lerna方式开发组件,组件代码变更没有自动热更新

Open DevanXU opened this issue 3 years ago • 12 comments

  • Node Version: v12.16.1
  • Platform: TypeScript

根据官方文档说明,采用lerna的方式进行组件开发。

  • 主应用 packages/main
  • 组件 packages/hello2

复现仓库:https://github.com/DevanXU/midway2-component-lerna-hot-update-issue

复现步骤

  • 根目录下安装包 yarn install
  • 根目录下启动 yarn dev
  • 启动浏览器 http://localhost:7001/test/hello,返回"hello world"
  • 修改 hello2/src/service/bookService.ts "hello world" -> "hello you"

预期结果:程序进行热更新,刷新http://localhost:7001/test/hello会返回 "hello you" 实际结果:页面一直显示"hello world"

DevanXU avatar Apr 02 '21 04:04 DevanXU

Not a single piece of update in almost 4 weeks?

DevanXU avatar Apr 27 '21 00:04 DevanXU

@midwayjs/cli 已提供 dev命令侦听额外文件变化功能,可以在你的项目中 main 文件夹中的 package.json 中修改dev script为: cross-env ets && cross-env NODE_ENV=local midway-bin dev --ts --watchFile=../hello/src

echosoar avatar Apr 27 '21 08:04 echosoar

可以先试试,这个功能我们觉得还不是很成熟。

czy88840616 avatar Apr 27 '21 09:04 czy88840616

可以先聪明,这个功能我们觉得还不太成熟。

请问可以监听多个文件夹吗

feiyueXH avatar Jun 16 '21 01:06 feiyueXH

可以的,--watchFile=../hello/src,../another/src

czy88840616 avatar Jun 18 '21 06:06 czy88840616

可以先试试,这个功能我们觉得还不是很成熟。

一次修改要重启两次服务器(保存两次)才能生效。没有计划彻底解决这个问题么? @czy88840616

DevanXU avatar Jun 28 '21 08:06 DevanXU

保存两次?是项目一次,组件一次?

这其实就等于一个 monorepo 里同时开发两个 node 库,这种其实不是很好。比较适合的是组件独立开发,测试,完成了之后才让应用使用。

czy88840616 avatar Jun 28 '21 14:06 czy88840616

保存两次?是项目一次,组件一次?

这其实就等于一个 monorepo 里同时开发两个 node 库,这种其实不是很好。比较适合的是组件独立开发,测试,完成了之后才让应用使用。

  • 修改的文件(组件文件)保存两次,第二次保存后才能生效。
  • 组件本身的开发和单元测试或许可以这样做,但集成开发测试时这种方式就不适合了。

我觉得引入“组件开发”这个理念挺好的,如果能在“组件”跟“镜像”做无缝切换就更好了。e.g. 组件功能增加到一定程度可以快速拆分出单独的镜像进行部署,尤其是对于一些比较耗资源的请求。 组件开发热更新的问题如果没有彻底解决,这种开发模式估计比较难普及,太影响开发效率。

DevanXU avatar Jun 29 '21 07:06 DevanXU

@czy88840616 采用lerna开发确实会有保存两次代码才生效的问题,之前还以为是我node版本太高了v16。 另外,通过control + c退出进程之后,偶尔还会遇见开发端口进程没有被杀死,需要lsof -i:7001查看进程号之后手动kill 12345杀死。

ZQun avatar Jun 29 '21 14:06 ZQun

带了编译这个就不是很好,尽可能组件独立开发吧,组件的设计就是和应用本身比较类似的。组件 + 轻量的框架(koa)+ 相对简单的项目 fixtures,理论上应该也可以 dev + test。

czy88840616 avatar Jun 29 '21 16:06 czy88840616

组件和应用开发之前怎么切换呢?例如:用 --type=component 的方式创建,但 yarn dev/test 都无法运行;反之,如果一开始用 --type=web 的方式创建,那后续要怎么样变成组件的方式集成呢?

DevanXU avatar Jul 10 '21 13:07 DevanXU

组件和应用开发之前怎么切换呢?例如:用 --type=component 的方式创建,但 yarn dev/test 都无法运行;反之,如果一开始用 --type=web 的方式创建,那后续要怎么样变成组件的方式集成呢?

组件只能说是应用的一部分代码,可以加入一个dev命令,用一个指定的框架去跑起来,比如组件里用了controller,你想测试就可以加一个web或者koa框架这个意思,默认组件脚手架里是没有加的。

czy88840616 avatar Jul 10 '21 13:07 czy88840616