midwayjs / midway

🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈
https://www.midwayjs.org/
MIT License
7.4k stars 577 forks source link

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

Open DevanXU opened 3 years ago

DevanXU commented 3 years ago

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

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

复现步骤

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

DevanXU commented 3 years ago

Not a single piece of update in almost 4 weeks?

echosoar commented 3 years ago

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

czy88840616 commented 3 years ago

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

feiyueXH commented 3 years ago

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

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

czy88840616 commented 3 years ago

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

DevanXU commented 3 years ago

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

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

czy88840616 commented 3 years ago

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

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

DevanXU commented 3 years ago

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

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

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

ZQun commented 3 years ago

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

czy88840616 commented 3 years ago

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

DevanXU commented 3 years ago

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

czy88840616 commented 3 years ago

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

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