摘抄自OpenResty最佳实践
Lua 上下文中应当严格避免使用自己定义的全局变量。可以使用一个 lj-releng 工具来扫描 Lua 代码,定位使用 Lua 全局变量的地方。lj-releng 的相关链接: https://github.com/openresty/openresty-devel-utils/blob/master/lj-releng
如果使用 macOS 或者 Linux,可以使用下面命令安装 lj-releng:
curl -L https://raw.githubusercontent.com/openresty/openresty-devel-utils/master/lj-releng > /usr/local/bin/lj-releng
chmod +x /usr/local/bin/lj-releng
然后进入你自己的 Lua 文件所在的工作目录,得到如下结果:
# lj-releng
foo.lua: 0.01 (0.01)
Checking use of Lua global variables in file foo.lua...
op no. line instruction args ; code
2 [8] SETGLOBAL 0 -1 ; A
Checking line length exceeding 80...
WARNING: No "_VERSION" or "version" field found in `use_foo.lua`.
Checking use of Lua global variables in file use_foo.lua...
op no. line instruction args ; code
2 [1] SETGLOBAL 0 -1 ; A
7 [4] GETGLOBAL 2 -1 ; A
8 [4] GETGLOBAL 3 -1 ; A
18 [8] GETGLOBAL 4 -1 ; A
Checking line length exceeding 80...
结果显示: 在 foo.lua 文件中,第 8 行设置了一个全局变量 A ; 在 use_foo.lua 文件中,没有版本信息,并且第 1 行设置了一个全局变量 A ,第 4、8 行使用了全局变量 A 。当然,更推荐采用 luacheck 来检查项目中全局变量,之后的“代码静态分析”一节,我们还会讲到如何使用 luacheck。
sudo apt install lua-check
#ngx变量在开启了配置--std ngx_lua后可被luacheck识别
luacheck filename or directory即可
lj-releng文件
https://github.com/openresty/openresty-devel-utils/edit/master/lj-releng