Skip to content

sealindx/lua-hotfix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

lua-hotfix

一个 lua 热更新的模块,主要针对一个模块里面的某些局部函数,全局函数更新,并不针对整个模块文件进行更新,并且 做到在更新过程中出现的语法错误时,撤销本次热更,尽可能不让热更新影响整个程序流程,测试用例7 有提到。 对于热更新,我写了一篇博客,可以先了解下 https://www.jianshu.com/p/30416db4f649

依赖

  • lua5.2 版本以上

测试

examples 目录下面有几个测试用例,运行方式如下:

cd examples/test1
lua main.lua

说明

  • 加载新模块
local hotfix = require "hotfix"
hotfix.module(list)

其中 module 参数是一个列表,以数组的形式传入,数组中的每一项,包含旧模块表,以及新模块路径,例如:

{
	{tb1, "./tb1_new.lua"},
	{tb2, "./tb2_new.lua"}
}
这个在测试用例8 中有使用到
  • 更新局部函数,或者表中的函数
fix(name, function)
其中 name 是需要更新的函数名称,function 是新的函数体,如果要更新 tb1 表里面的方法,要用 *__module* 来取代 tb1,因为 tb1 是做为更新模块入口
  • 更新全局函数 对于全局函数的更新,最好函数体里面用到的变量,上值都是全局的,不然容易更新失败

注意

  • 对于更新的函数,如果要添加新的函数,变量调用,需要自己手动声明,但不必赋值
  • 对于同一个模块中,不能出现两个名称一样的函数,保证唯一性,保证热更正确
  • 如果要更新的函数存到一个 hashmap 中,通过 key 来索引函数。这种情况下更新函数也是不起作用的,因为更新后的函数并不会自动存到 hashmap 中

About

一个 lua 热更新的模块

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages