egg-core源码疑惑
发布于 1 个月前 作者 axetroy 408 次浏览 来自 问答

读了一下源码,读到egg-core这里。

发现了这个 EGG_LOADER, 源码只有3个地方引用到,同文件内…

1.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L20

2.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L116

3.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L338

EGG_LOADERSymbol类型,挂载在 EggCore的原型上。

那么EggCore.prototype[EGG_LOADER]应该是私有方法,仅供内部使用的

神奇的是,那你把图二中的this[EGG_LOADER]替换成图三的内容,即require('./loader/egg_loader')

跑测试立马报错,请问这是什么黑科技?

EGG_LOADER是egg.js文件中的变量,并没有exports出去。 那么意味着跑的测试用例,实例化的eggCore,也是没办法获取到EggCore.prototype[EGG_LOADER]的 那么测试是怎么失败的呢

4 回复

看起来,这段代码好像是多余的

egg_loader也是返回一个类

直接require不就好了吗

  get [EGG_LOADER]() {
    return require('./loader/egg_loader');
  }

但是删掉之后,测试用例又不通过. 什么情况?

Symbol.for() 并不是私有的,在其他地方可以用到的,这段用于框架继承时的自定义 loader。

@atian25 受教了,吓得我赶紧去看了一下Symbol.

Symbol.for平时不经常用到

对于绝大部分开发者来说,用不到这个自定义 loader 的,只有上层框架开发者在特殊的情况下才需要定制。 一般在 app.js 里面调用 loader 的 api 增加 loader 规范即可。

回到顶部