关于lua热更新
热更新的原理
Lua的
require(modelname)
把一个lua文件加载存放到package.loaded[modelname]。
当我们加载一个模块的时候,会先判断是否在package.loaded中已存在,若存在则返回改模块,不存在才会加载(loadfile),防止重复加载。
package.loaded是一个Table,其中包含了全局表_G、默认加载的模块(string, debug, package, io, os, table, math, coroutine)和用户加载的模块。
热更新实现
function reload_module( module_name )
local old_module = package.loaded[ module_name ] or {}
package.loaded[ module_name ] = nil
require( module_name )
local new_module = package.loaded[ module_name ]
for k, v in pairs( new_module ) in
old_module[ k ] = v
end
package.loaded[ module_name ] = old_module
return old_module
end
-- 调用
function reload()
local need_reload = {"test1", "test2"} -- 需要热更的模块名
for k, v in pairs( need_reload )
reload_module( v )
end
end