[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.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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