Lua:善用luarocks管理公共库

天翼云开发者社区
• 阅读 3

本文分享自天翼云开发者社区《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为例:

测试代码:

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

执行结果:

/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

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)
# find /usr/local/openresty/luajit -name cjson.so 
/usr/local/openresty/luajit/lib/lua/5.1/cjson.so

luarocks 安装nettle

# 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
点赞
收藏
评论区
推荐文章
创建本地yum仓库
本文分享自天翼云开发者社区《》,作者:zzzzgj;背景有的部署环境不通外网,但希望继续使用yum命令下载依赖包而不修改部署脚本逻辑。因此记录一个本地repo的建立方法。1、获取依赖包如在通网的机器上下载openssldevel所有依赖yumdownloa
RPM常用命令以及组合使用场景
本文分享自天翼云开发者社区《》,作者:邬祥钊当涉及到管理基于RedHat系的Linux系统时,RPM(RedHatPackageManager)是一个常用的软件包管理器。以下是一些常用的RPM命令以及它们的组合使用场景:常用命令:1.rpmivhpacka
Stella981 Stella981
4年前
Luarocks 安装艰难过程
1.最好新建一个你自己的目录,然后把lua Luarocks都安装在这个文件夹下面,方便以后维护2.安装lua环境$wgethttp://www.lua.org/ftp/lua5.3.0.tar.gz $tarzxvflua5.3.0.tar.gz $cdlua5.3.0 $viMakefile 
Wesley13 Wesley13
4年前
Lua中cJson的读写
这里采用的是LuaCJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高10~20倍。并且LuaJson完全支持UTF8,无需以来其他非Lua/LuaJit相关包。环境安装这里就不详细写了,随便问下谷歌就有一大堆答案。示例代码解析JSONlocal cjson  requi
Stella981 Stella981
4年前
Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00前言ngx\_lua\_waf是一款基于ngx\_lua的web应用防火墙,使用简单,高性能、轻量级。默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则:select.(from|limit)(?:(union(.?)select))(?:from\Winformation_schema\W)这边
探究Openresty中ngx.re与Lua string.re两种正则的选择
本文分享自天翼云开发者社区《》.作者:王淋0.背景openresty中存在2套正则API,即ngx.re与lua语言的string库,都可以实现正则匹配查找等功能,那么,这2个API有什么区别,又如何选择呢?1.性能测试1.1简单loop测试a)短字符串&
小万哥 小万哥
2年前
Python 包管理器入门指南
什么是PIP?PIP是Python包管理器,用于管理Python包或模块。注意:如果您的Python版本是3.4或更高,PIP已经默认安装了。什么是包?一个包包含了一个模块所需的所有文件。模块是您可以包含在项目中的Python代码库。检查是否安装了PIP在
搭建MySQL主从
本文分享自天翼云开发者社区《》,作者:2m——本文基于MySQL5.7.36进行演示1、下载MySQL安装包官网网址:https://downloads.mysql.com/archives/community2、解压MySQL安装包将以下包上传至服务器:
openresty中使用ngx.sleep(0)防止worker进程阻塞
本文分享自天翼云开发者社区《》.作者:小谢不用谢1.ngx.sleep(0)的工作原理在OpenResty中,ngx.sleep(0)函数的作用是让当前的Lua协程主动放弃CPU执行权,以便Nginx能够及时处理其他并发请求和I/O操作。具体来说,调用ng
lua-zlib模块安装与使用
本文分享自天翼云开发者社区《》.作者:luckylywluazlib包用于nginx上对gzip数据进行解压缩,可将luazlib编译成一个动态链接库zlib.so,便于lua引用。github:https://github.com/brimworks/l
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
1.0k
粉丝
16
获赞
40