Luarocks是一個Lua包管理器,基於Lua語言開發,提供一個命令行的方式來管理Lua包依賴、安裝第三方Lua包等,社區比較流行的包管理器之一,另還有一個LuaDist,Luarocks的包數量比LuaDist多,更細節的二者對比可參閱這裏。git
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 ..
mkdir lua-package cd lua-package luarocks write_rockspec
執行完以後會發現多了一個 lua-package-dev-1.rockspec 文件,這個文件就是咱們建立的 rockspec 文件,接着咱們打開這個文件,查看裏面的元信息,以下所示github
#該包名 package = "lua-package" #版本號(注意:一、版本號和你文件名所包含的版本號要一致,如這裏的版本號是:dev-1,文件名是:lua-package-dev-1.rockspec #二、版本號要以-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 文件,以下所示:vim
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<zw900808@gmail.com>", #指定開源協議 license = "MIT" } #設置Lua的依賴環境 dependencies = { "lua >= 5.1, < 5.4" } build = { type = "builtin", modules = {} }
注意:version 如今已經改爲了 1.0-1 因此文件名也要改爲lua-package-1.0-1.rockspecapi
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文件裏面加上這段curl
modules = { ["lua-package"] = "lua-package.lua" }
完整的rockspec代碼以下所示:ide
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<zw900808@gmail.com>", license = "MIT" } dependencies = { "lua >= 5.1, < 5.4" } build = { type = "builtin", modules = { ["lua-package"] = "lua-package.lua" } }
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
git tag v1.0-1 git push --tags
若是發現tag打錯了,可使用下面代碼進行刪除測試
#刪除本地版本 git tag -d your-tag #刪除遠程倉庫版本 git push origin :refs/tags/your-tag
註冊地址在這,註冊完成以後,點擊菜單裏面的 Settings ,進去以後再點擊 API keys,在這裏你就能夠建立本身的api-keys了,建立好以後複製一下,接下來咱們會用到。ui
luarocks upload your-rockspec-name.rockspec --api-key=your-api-key
成功以後,咱們到luarocks官網看看你剛上傳的包,以下是我上傳的結果
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
1:不要把tag和推送代碼搞反了,是先推送代碼,後打包tag