读了一下源码,读到egg-core这里。
发现了这个 EGG_LOADER
, 源码只有3个地方引用到,同文件内…
https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L20
https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L116
https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L338
EGG_LOADER
是Symbol
类型,挂载在 EggCore
的原型上。
那么EggCore.prototype[EGG_LOADER]
应该是私有方法,仅供内部使用的
神奇的是,那你把图二中的this[EGG_LOADER]
替换成图三的内容,即require('./loader/egg_loader')
跑测试立马报错,请问这是什么黑科技?
EGG_LOADER是egg.js文件中的变量,并没有exports出去。 那么意味着跑的测试用例,实例化的eggCore,也是没办法获取到
EggCore.prototype[EGG_LOADER]
的 那么测试是怎么失败的呢
看起来,这段代码好像是多余的
egg_loader也是返回一个类
直接require不就好了吗
get [EGG_LOADER]() {
return require('./loader/egg_loader');
}
但是删掉之后,测试用例又不通过. 什么情况?
Symbol.for()
并不是私有的,在其他地方可以用到的,这段用于框架继承时的自定义 loader。
@atian25 受教了,吓得我赶紧去看了一下Symbol.
Symbol.for
平时不经常用到
对于绝大部分开发者来说,用不到这个自定义 loader 的,只有上层框架开发者在特殊的情况下才需要定制。 一般在 app.js 里面调用 loader 的 api 增加 loader 规范即可。