插件加载器
前面说到了在init阶段会加载所有插件,并将插件都缓存在一个全局变量 tlops
中,我们看回插件加载器 tl_ops_process_load_plugins
,其核心逻辑是通过 cache.get101("tl_ops_plugins_list") 获取到的配置的插件名称进行以此 require,并放入table的过程。
流程比较简单,代码如下。
# 代码位置 : plugins/tl_ops_plugin.lua
-- 插件加载器
function _M:tl_ops_process_load_plugins()
local module_str, _ = cache_plugins_manage:get101(constant_plugins_manage.cache_key.list);
if not module_str or module_str == nil then
tlog:dbg("tl_ops_process_load_plugins no module, use constant default, default=",constant_plugins_manage.list)
module_str = cjson.encode(constant_plugins_manage.list)
end
local module = cjson.decode(module_str)
if not module or module == nil then
tlog:err("tl_ops_process_load_plugins module decode err")
return;
end
for i = 1, #module do
local name = module[i].name
local plugin_data = plugin_load:tl_ops_plugin_load_by_name(name)
table.insert(self.plugins, plugin_data)
end
tlog:dbg("tl_ops_process_load_plugins , module=",module,",plugins=",self.plugins)
end
备注
可能大家会对get101有点疑惑,这里我解释一下,plugin的加载我放在 tl_ops_process_init
阶段,在这个阶段,部分内置api和函数调用是不可用的,因此为了避免这种问题,plugin的加载默认从 store 文件中取值,就不走自定义数据源了