# lua-hotfix **Repository Path**: loveshe/lua-hotfix ## Basic Information - **Project Name**: lua-hotfix - **Description**: No description available - **Primary Language**: Lua - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-01 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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 中