lua 的热更新机制主要由require(),来决定通过package.loaded[moudle_name] = nil 强制删除,当前内存中的,然后require()加载该模块,但是这里有个问题,这样的热更新只能热更新新的引用,所以先用一个值保存旧的模块,再引用的新的模块逐渐替换,之前引用该模块的文件可以热更新掉,贴代码:
function reload_moudle(moudle_name)
local old_name = _G[moudle_name] --保存引用的package.loaded[moudle_name] = nil
require(moudle_name) --加載新的local new_name = _G[moudle_name]
for k,v in pairs(new_name) do
old_name[k] =v --引用成新的
end
package.loaded[moudle_name] = old_name --重新添加
end