Lua:善用luarocks管理公共库

本文分享自天翼云开发者社区《Lua善用luarocks管理公共库》.作者:王****淋

什么是Luarocks

Luarocks是一个Lua包管理器,基于 Lua 语言开发,提供一个命令行的方式来管理 Lua 包依赖、安装第三方 Lua 包等,社区比较流行的包管理器之一

Python具有PIP,Ruby具有Gems,Java具有Maven,Node具有npm,Lua具有Luarocks。

前要:先看Lua的require

以openresty中的Luajit/usr/local/openresty/luajit/bin/luajit为例:

测试代码:

lua 复制代码
local cjson = require "cjson"
local s = cjson.encode({"test", "lua", "package"}) print(s) 

执行结果:

swift 复制代码
/usr/local/openresty/luajit/bin/luajit: test.lua:3: module 'cjson' not found:
        no field package.preload['cjson'] no file './cjson.lua' no file '/usr/local/openresty/luajit/share/luajit-2.1.0-beta3/cjson.lua' no file '/usr/local/share/lua/5.1/cjson.lua' no file '/usr/local/share/lua/5.1/cjson/init.lua' no file '/usr/local/openresty/luajit/share/lua/5.1/cjson.lua' no file '/usr/local/openresty/luajit/share/lua/5.1/cjson/init.lua' no file './cjson.so' no file '/usr/local/lib/lua/5.1/cjson.so' no file '/usr/local/openresty/luajit/lib/lua/5.1/cjson.so' no file '/usr/local/lib/lua/5.1/loadall.so' stack traceback: [C]: in function 'require' test.lua:3: in main chunk [C]: at 0x004055d0 

从测试结果可以看到,require有几个搜索目录,理论上任意目录都可以

Luarocks包管理

我们软件开发过程中会引入大量库。如果简单把所有库都放入代码仓,那会造成大量的混乱。因此,更适合的办法是,使用luarocks包管理工具,将库安装到库目录。

示例:luarocks 安装 cjson

以openresty中的Luajit/usr/local/openresty/luajit/bin/luajit为例:

/usr/local/openresty/luajit/bin/luarocks install lua-cjson

apache 复制代码
Installing /luarocks.org/lua-cjson-2.1.0.10-1.src.rock

lua-cjson 2.1.0.10-1 depends on lua >= 5.1 (5.1-1 provided by VM) gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c lua_cjson.c -o lua_cjson.o gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c strbuf.c -o strbuf.o gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c fpconv.c -o fpconv.o gcc -shared -o cjson.so lua_cjson.o strbuf.o fpconv.o No existing manifest. Attempting to rebuild... lua-cjson 2.1.0.10-1 is now installed in /usr/local/openresty/luajit (license: MIT) 
sh 复制代码
# find /usr/local/openresty/luajit -name cjson.so 
/usr/local/openresty/luajit/lib/lua/5.1/cjson.so

luarocks 安装nettle

sh 复制代码
# find /usr/local/openresty/luajit -name *nettle*
/usr/local/openresty/luajit/lib/luarocks/rocks-5.1/lua-resty-nettle
/usr/local/openresty/luajit/lib/luarocks/rocks-5.1/lua-resty-nettle/2.1-1/lua-resty-nettle-2.1-1.rockspec
/usr/local/openresty/luajit/share/lua/5.1/resty/nettle
/usr/local/openresty/luajit/share/lua/5.1/resty/nettle/types/nettle-types.lua
/usr/local/openresty/luajit/share/lua/5.1/resty/nettle.lua
相关推荐
进哥AI研习社5 天前
缓存策略三层模型——CDN、Service Worker 与 HTTP 缓存
isr·cdn·缓存策略·cache-control·service worker·http 缓存·stale-while
tg_xianheyun8 天前
BytePlus CDN加速如何优化海外访问体验?
云计算·cdn·cdn加速·云直播·byteplus
tg_xianheyun8 天前
2026BytePlus CDN加速应用场景全面解析
服务器·数据库·阿里云·云计算·cdn·全球访问优化·云直播
却道天凉_好个秋15 天前
计算机网络:CDN
学习·音视频·cdn
juxieyiyi87815 天前
摆脱第三方分成,搭建专属算力管理平台
cdn·pcdn·互联网项目·双收益·pcdn平台搭建双收益
霸刀17 天前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
mac·cdn·dns
霸刀17 天前
nslookup 与 dig 使用指南:DNS 查询、区别对比及真实案例解读
linux·cdn·dns
sudebao点com18 天前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
windows·macos·https·cdn·dns·nslookup·网络排错
黄俊懿1 个月前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第三节:CDN扩展-多地址直连
网络·计算机网络·架构·系统架构·cdn·dns·架构设计
Mycdn_WD1 个月前
项目交付后的机房,能参与边缘节点协作吗?
人工智能·cdn·pcdn·城域网·pcdn资源招募