egg [Feature Request] 使 FileLoader 忽略 node_modules 中的 .ts 文件

7lrncoxx  于 2022-10-27  发布在  其他
关注(0)|答案(1)|浏览(285)

Background

我司基于 egg 开发了一个框架(简称 A),并作为 npm 包发布在内网

其它项目依赖此框架进行开发时,如果想把框架的 .ts 源码打包进 npm 包、方便调试,那么 egg-bin dev --ts 时,egg-core 会尝试加载 node_modules/A/app/service/*.ts ,然后因为 .ts 的语法而报错。

解决办法很简单,可以在框架 A 中对 FileLoader 增加过滤,将绝对路径含 node_modules 的 .ts 文件过滤掉即可。

我看了 FileLoader 是支持 filter 函数的,但是 egg 中 调用 loadService()loadController() 的位置并没有传入任何参数,而这几个函数调用时的 ContextLoader ,所以实际上 FileLoader 的 filter 是无法被用户使用的。

希望在 Application 初始化时,能增加给一个传 filter 函数的属性,FileLoader 默认去加载这个 filter ,从而可以自行对扫描路径进行过滤。

Proposal

在 Application 初始化时,能增加给一个传 filter 函数的属性,FileLoader 默认去加载这个 filter ,从而可以自行对扫描路径进行过滤,或者默认 filter 就是过滤掉包含 node_modules 的 .ts 文件路径,毕竟 node_modules 中通常只会用 .js ,而不会去编译。

我发现 filter 生效是在 getExports 报错之后的,所以增加 filter 函数也没有用。不过考虑到实际开发时,node_modules 中的任何 .ts 其实并不会被使用,只会用里面的 .js 文件,所以在 FileLoader 中直接把路径包含 node_modules 的 .ts 文件忽略即可

即在下面代码的内层循环中进行判断

https://github.com/eggjs/egg-core/blob/master/lib/loader/file_loader.js#L147-L172

Additional context

已经提交 PR: eggjs/egg-core#230

相关问题