[Feature request] 废弃遍历文件夹的启动方式 #3859
Replies: 4 comments 12 replies
-
开发、编译的时候是会遍历,生产环境是直接读取 js 文件以及装饰器相关 meta,不会有遍历行为的 |
Beta Was this translation helpful? Give feedback.
-
如果只是编译和启动阶段的遍历那么性能影响是可以接受的,我更喜欢开发维护的遍历(不用想 nestjs 那样还需要自己 @@privider 等等去添加信息) |
Beta Was this translation helpful? Give feedback.
-
我不关注启动时扫描文件然后框架动态导入的性能,我关注的是工程的可维护性和后续迭代。如果midway遍历文件然后动态加载(我估计是收到了古老的egg的影响),那么我需要关注midway的是如何加载的,项目并存cjs和esm的兼容性、midwya能不能支持mjs、cjs的文件后缀、如何渐进式地迁移到esm等一系列问题,而这些问题都是因为midway黑盒地实现了遍历文件然后动态加载。 如果midway不遍历文件,要求静态显式导入,那么最终只有一个启动文件,顺着这个启动文件的import语句,我可以定位到所有加载到项目的js文件,而这些加载方式是遵循node的标准的,我不需要再额外学习。如果我项目想要渐进式迁移到esm,我可以逐步将一些文件改成mjs文件后缀,最后改到所有文件都是mjs文件后缀后,再改 |
Beta Was this translation helpful? Give feedback.
-
Midway 这种启动方式,和最近掘金大火的一片技术文章《不要再写满屏import导入啦!🔥》有点异曲同工,但是认为这篇文章一开始的出发点就是错的。用户看起来节省了点代码, 这种根据文件结构(或者装饰器注入的metadata)动态导入的方式维护成本反而可能更高。高赞评论全是骂声一片🤣 |
Beta Was this translation helpful? Give feedback.
-
The feature, motivation(功能、动机)
目前midway启动文件(bootstrap.js)如下:
我没看过midway的源码,但我盲猜应该是
@midwayjs/bootstrap
这个包会遍历本地的dist文件夹或者src文件夹,然后将controller和provider等找出来,构建ioc容器。这种方式很黑盒。看起来和java的spring很像,但是一点也不js。目前js主流还是用静态导入导出,包括react、nest等生态。
这种遍历至少有如下问题:
npx ts-prune
来查找dead code不方便,想要删除不用的代码太麻烦。node bootstrap.js
是去遍历dist文件夹,ts-node bootstrap.js
是去遍历src文件夹。@midwayjs/bootstrap
里面处理,还不如遵循规范,交给用户,@midwayjs/bootstrap
模块就接收controllers和providers等数组就行了Alternatives(替代方案)
static
和dynamic
方式,默认static
,要求用户传递controller、provider等数组。dynamic
模式则和当前类似去遍历文件夹Additional context(其他上下文)
No response
Beta Was this translation helpful? Give feedback.
All reactions