1、什麼是Luarocks?
Luarocks是一個Lua包管理器,基於Lua語言開發,提供一個命令行的方式來管理Lua包依賴、安裝第三方Lua包等,社區比較流行的包管理器之一,另還有一個LuaDist,Luarocks的包數量比LuaDist多,更細節的兩者對比可參閱這裏。
2、源碼安裝Luarocks
wget https://luarocks.org/releases/luarocks-2.4.1.tar.gz
tar -zxvf luarocks-2.4.1.tar.gz
cd luarocks-2.4.1
./configure
make build && make install
cd ..
3、創建rockspec文件並修改
mkdir lua-package
cd lua-package
luarocks write_rockspec
執行完之後會發現多了一個 lua-package-dev-1.rockspec 文件,這個文件就是我們創建的 rockspec 文件,接着我們打開這個文件,查看裏面的元信息,如下所示
#該包名
package = "lua-package"
#版本號(注意:1、版本號和你文件名所包含的版本號要一致,如這裏的版本號是:dev-1,文件名是:lua-package-dev-1.rockspec
#2、版本號要以-x結尾,如0.0.1-1,1.3-1,如果你不按照這種規則定義則會報錯!)
version = "dev-1"
source = {
#指定源碼的位置(一般我們會發布到git所在的託管服務器,如我託管的是github就可以填寫github託管地址了)
url = "*** please add URL for source tarball, zip or repository here ***"
}
description = {
#該包所在的說明文檔位置(我託管的是github,所以這裏可以填寫分支在gh-pages所在的url)
homepage = "*** please enter a project homepage ***",
#指明所基於的開源協議
license = "*** please specify a license ***"
}
build = {
#編譯方式
type = "builtin",
#指定包含的模塊
modules = {}
}
現在我們來修改下 rockspec 文件,如下所示:
package = "lua-package"
version = "1.0-1"
source = {
#這裏我指定的是我當前包所在的github託管地址
url = "git://github.com/zhangwei900808/lua-package.git",
#指定tag版本號
tag = "v1.0-1",
#設置爲master分支
branch = "master"
}
description = {
#設置描述信息
summary = "A test lua package with luarocks",
#源碼所在的說明文檔地址
homepage = "https://github.com/zhangwei900808/lua-package",
#指定維護者信息
maintainer = "zhangwei<[email protected]>",
#指定開源協議
license = "MIT"
}
#設置Lua的依賴環境
dependencies = {
"lua >= 5.1, < 5.4"
}
build = {
type = "builtin",
modules = {}
}
注意:version 現在已經改成了 1.0-1 所以文件名也要改成lua-package-1.0-1.rockspec
4、創建lua-package.lua文件,並修改rockspec文件
touch lua-package.lua
創建好之後,接着我們編輯這個文件,加入下面代碼
local _M = {}
_M._VERSION = '0.1'
local mt = { __index = _M }
function _M.new( self, firstname, lastname )
return setmetatable({
firstname = firstname,
lastname = lastname
}, mt)
end
function _M.get_fullname(self)
return self.firstname .. self.lastname
end
return _M
修改之後,我們在rockspec文件裏面加上這段
modules = {
["lua-package"] = "lua-package.lua"
}
完整的rockspec代碼如下所示:
package = "lua-package"
version = "1.0-1"
source = {
url = "git://github.com/zhangwei900808/lua-package.git",
tag = "v1.0-1",
branch = "master"
}
description = {
summary = "A test lua package with luarocks",
homepage = "https://github.com/zhangwei900808/lua-package",
maintainer = "zhangwei<[email protected]>",
license = "MIT"
}
dependencies = {
"lua >= 5.1, < 5.4"
}
build = {
type = "builtin",
modules = {
["lua-package"] = "lua-package.lua"
}
}
5、推送代碼到github並添加README.md文件
touch README.md
vim README.md
git add .
git commit -am 'your commit'
git push -u origin master
並添加gh-pages分支做爲 rockspec的homepage使用,如下所示:
git branch gh-pages
git checkout gh-pages
git push --set-upstream origin gh-pages
6、添加git tag
git tag v1.0-1
git push --tags
如果發現tag打錯了,可以使用下面代碼進行刪除
#刪除本地版本
git tag -d your-tag
#刪除遠程倉庫版本
git push origin :refs/tags/your-tag
7、註冊luarocks並創建api-key
註冊地址在這,註冊完成之後,點擊菜單裏面的 Settings ,進去之後再點擊 API keys,在這裏你就可以創建自己的api-keys了,創建好之後複製一下,接下來我們會用到。
8、上傳你的lua-package包
luarocks upload your-rockspec-name.rockspec --api-key=your-api-key
成功之後,我們到luarocks官網看看你剛上傳的包,如下是我上傳的結果
9、安裝並使用lua-package包
luarocks install lua-package
接下來我們寫一段代碼測試下lua-package可用性,如下所示:
location /test {
content_by_lua_block {
local package = require("lua-package")
local packageObj = package:new('zhang', 'wei')
ngx.say(packageObj:get_fullname())
}
}
啓動這段代碼,並訪問查看輸出結果:
curl "http://127.0.0.1/test"
zhangwei
10、總結:
1:不要把tag和推送代碼搞反了,是先推送代碼,後打包tag