####討論話題git
####什麼是Luarocks Luarocks是一個Lua包管理器,基於Lua語言開發,提供一個命令行的方式來管理Lua包依賴、安裝第三方Lua包等,社區比較流行的包管理器之一,另還有一個LuaDist,Luarocks的包數量比LuaDist多,更細節的二者對比可參閱這裏。github
####源碼安裝部署Luarocks(爲什麼使用源碼見此文)macos
wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz tar zxvf luarocks-2.2.2.tar.gz cd luarocks-2.2.2 ./configure --help
configure help查看所支持的安裝配置,這裏咱們主要關注如下兩個bootstrap
--prefix=DIR Prefix where LuaRocks should be installed. Default is /usr/local --with-lua=PREFIX Use Lua from given prefix. Default is auto-detected (the parent directory of $LUA_BINDIR).
--prefix設置Luarocks安裝路徑,--with-lua指定Luarocks依賴的Lua安裝路徑。api
#####爲什麼強調設置--prefix 設置prefix會自動將Luarocks以及日後使用Luarocks安裝的Lua包,LuaC包都安裝到Luarocks安裝路徑下的相應位置,不然相關的包文件散落在文件系統中,顯得雜亂不便於管理,若是所安裝的Lua模板包含bin文件,則會自動安裝到此目錄下的bin路徑,與Luarocks可執行文件同一路徑,更便於管理、使用。服務器
./configure --prefix=/usr/local/luarocks-2.2.2 --with-lua=/usr/local/lua-5.1.5 make build make install
安裝完成後,直接運行luarocks便可使用。網絡
// luarocks LuaRocks 2.2.2, a module deployment system for Lua NAME /usr/local/bin/luarocks - LuaRocks main command-line interface
####註冊Luarocks爲Lua社區貢獻本身的代碼 當前IT技術發展驚人的快,很大程度上與開源社區的快速發展有直接關係,你們一塊兒分享知識、經驗、解決方案,互相支持、協做。咱們從社區汲取營養,學習成長,回過頭來咱們也須要回饋社區,這纔是一個良性循環。app
使用Luarocks爲Lua社區貢獻代碼很是簡單,只需以下幾步:框架
luarocks write_rockspec
命令自動生成)luarocks upload --api-key=
) Add To Manifest
將你的項目添加到相關分類方便分類檢索,默認已經在root裏。 ####Luarocks使用初探 命令行運行luarocks
,或者luarocks help
能看到相關luarocks的詳細信息,大體分爲如下6個段。curl
- LuaRocks main command-line interface
luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
rocks/rockspecs
的server,默認的<a name="server"/>server搜尋順序爲:https://luarocks.org https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/ http://luafr.org/moonrocks/ http://luarocks.logiceditor.com/rocks
另外選項還設置是否僅僅下載源碼、是否顯示安裝過程、指定超時時間等。 4. VARIABLES/變量 Variables from the "variables" table of the configuration file can be overriden with VAR=VALUE assignments. 5. COMMANDS/命令列表 luarocks的常規操做命令install、search、list等
6. CONFIGURATION/相關配置信息 Lua版本,rocks trees等安裝luarocks時的配置
在luarocks使用中咱們主要關注GENERAL OPTIONS、和COMMANDS兩項。GENERAL OPTIONS與其餘COMMANDS配合使用。以搜索香草/vanilla框架(一個基於Lua開發的Openresty Web應用開發框架)爲例:
// luarocks search vanilla #直接搜索vanilla Search results: =============== Rockspecs and source rocks: --------------------------- vanilla 0.1.0-1 (rockspec) - https://luarocks.org 0.1.0-1 (src) - https://luarocks.org 0.0.1-1 (rockspec) - https://luarocks.org 0.0.1-1 (src) - https://luarocks.org
也能夠在命令後加上一個GENERAL OPTIONS/通用選項好比--verbose來顯示整個命令運行過程(這對排查安裝中遇到的問題很是有用)。
// luarocks search vanilla --verbose #添加參數顯示整個搜索vanilla的過程 os.execute: 'curl' -k -f -L --user-agent 'LuaRocks/2.2.2 macosx-x86_64 via curl' --connect-timeout 30 'https://luarocks.org/manifest-5.1.zip' 2> /dev/null 1> '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip' Results: 1 1 (number): 0 os.execute: unzip -n '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip' Archive: /Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip inflating: manifest-5.1 Results: 1 1 (number): 0 Search results: =============== Rockspecs and source rocks: --------------------------- vanilla 0.1.0-1 (rockspec) - https://luarocks.org 0.1.0-1 (src) - https://luarocks.org 0.0.1-1 (rockspec) - https://luarocks.org 0.0.1-1 (src) - https://luarocks.org
命令的執行參數追加的格式如同SYNOPSIS描述的那樣: luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
, 可使用luarocks <command> help
查看command更細節的幫助文檔,這也很是有用。
#####幾個經常使用的luarocks命令詳解 上面演示了search命令,看字面意思就很明白是用來搜索模塊的,使用相對比較簡單也容易理解,相似的命令還有download、help、install、list、new_version、remove、upload
等,可是餘下的幾個命令也很重要,使用起來就不是那麼好理解,下面以一個test的項目重點演示說明(每一個命令使用時都建議先執行luarocks <command> help
查看詳細文檔,下面僅截取各命令文檔的NAME和SYNOPSIS段並詳述、演示使用過程)。
~/Desktop/ tree ./t-luarocks ./t-luarocks ├── test │ ├── spec │ │ └── init.lua │ ├── sys │ │ ├── config.lua │ │ └── vanilla.lua │ └── v │ ├── application.lua │ ├── bootstrap.lua │ ├── controller.lua │ └── dispatcher.lua └── test-0.0.rc1-1.rockspec
#####➥ build
~/Desktop/t-luarocks/ luarocks help build NAME /usr/local/bin/luarocks build - Build/compile a rock. SYNOPSIS /usr/local/bin/luarocks build [--pack-binary-rock] [--keep] {<rockspec>|<rock>|<name> [<version>]}
build命令用來基於rock二進制文件安裝Lua包,前提rock文件基於規範的rockspec文件打包,且rockspec包含正確的build段描述。
#####➥ doc
~/Desktop/t-luarocks/ luarocks help doc NAME /usr/local/bin/luarocks doc - Shows documentation for an installed rock. SYNOPSIS /usr/local/bin/luarocks doc <argument>
doc命令用來顯示本地已經安裝的Lua包根目錄下全部的Markdown文檔列表,並默認自動打開README.md文件,若是相應的Lua包本地並無安裝,則會到服務器上搜尋。
~/Desktop/t-luarocks/ luarocks doc vanilla Documentation files for vanilla 0.1.0-1 --------------------------------------- /usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/ CHANGELOG.md LICENSE.md README-zh.md README.md Opening /usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/README.md ...
#####➥ lint
~/Desktop/t-luarocks/ luarocks help lint NAME /usr/local/bin/luarocks lint - Check syntax of a rockspec. SYNOPSIS /usr/local/bin/luarocks lint <rockspec>
lint命令用來檢查當前目錄rockspec文件(rockspec文件爲Luarocks包管理的描述文件,細節寫法會另起文檔描述)的格式,若是格式沒問題則不會有任何顯示,不然則暴露細節錯誤,指導修改。
#####➥ make
~/Desktop/t-luarocks/ luarocks help make NAME /usr/local/bin/luarocks make - Compile package in current directory using a rockspec. SYNOPSIS /usr/local/bin/luarocks make [--pack-binary-rock] [<rockspec>]
make命令基於一個rockspec文件安裝Lua包,這個文件必須是本地的一個文件,而不像install那樣能夠是一個網絡文件。這個命令還能夠經過追加參數--pack-binary-rock
而僅僅編譯生成rock文件,make命令與install命令的區別在於install基於rock文件,而make必須基於rockspec文件。
#####➥ pack
~/Desktop/t-luarocks/ luarocks help pack NAME /usr/local/bin/luarocks pack - Create a rock, packing sources or binaries. SYNOPSIS /usr/local/bin/luarocks pack {<rockspec>|<name> [<version>]}
pack命令根據本地rockspec文件將Lua源碼包打包成二進制的rock文件(install命令基於rock文件進行安裝)。
#####➥ path
~/Desktop/t-luarocks/ luarocks help path NAME /usr/local/bin/luarocks path - Return the currently configured package path. SYNOPSIS /usr/local/bin/luarocks path
path命令顯示當前Luarocks所配置的LUA_PATH和LUA_CPATH值
#####➥ purge
~/Desktop/t-luarocks/ luarocks help purge NAME /usr/local/bin/luarocks purge - Remove all installed rocks from a tree. SYNOPSIS /usr/local/bin/luarocks purge --tree=<tree> [--old-versions]
purge命令必須傳入一個--tree
參數,這裏的tree實際上是一個路徑,luarocks安裝Lua包所在路徑,purge命令將這個路徑下面全部的包都remove。這個命令徹底挽救了沒有指定--prefix而安裝luarocks的同窗,在沒有指定--prefix的時候luarocks將默認的安裝到/usr/local
路徑下,基於此安裝的包也將散落在整個/usr/local
目錄,真是太亂。這時候在命令行執行luarocks purge --tree=/usr/local
整個世界都乾淨了。
#####➥ show
~/Desktop/t-luarocks/ luarocks help show NAME /usr/local/bin/luarocks show - Shows information about an installed rock. SYNOPSIS /usr/local/bin/luarocks show <argument>
show 命令可用來顯示包信息,這些信息來自於當前Lua包的rockspec文件中。 #####➥ unpack
~/Desktop/t-luarocks/ luarocks help unpack NAME /usr/local/bin/luarocks unpack - Unpack the contents of a rock. SYNOPSIS /usr/local/bin/luarocks unpack [--force] {<rock>|<name> [<version>]}
unpack命令將pack命令打包的rock解開。
#####➥ upload
~/Desktop/t-luarocks/ luarocks help upload NAME /usr/local/bin/luarocks upload - Upload a rockspec to the public rocks repository. SYNOPSIS /usr/local/bin/luarocks upload [--skip-pack] [--api-key=<key>] [--force] <rockspec>
upload命令會根據rockspec文件將當前Lua包打包成rock文件而後上傳至luarocks.org,上傳須要添加一個在官網配置過的api-key
參數進行驗證。
#####➥ write_rockspec
~/Desktop/t-luarocks/ luarocks help write_rockspec NAME /usr/local/bin/luarocks write_rockspec - Write a template for a rockspec file. SYNOPSIS /usr/local/bin/luarocks write_rockspec [--output=<file> ...] [<name>] [<version>] {<url>|<path>}
write_rockspec命令在當前目錄自動生成一個rockspec文件骨架,一個template,注意僅僅是一個骨架,有些參數必須落實,不然沒法正常使用,好比source、description
段的配置。
下面給出一個簡單的rockspec文件模板,包含了rockspec文件的基本必選項:
package ="vanilla" version ="0.1.0-1" source ={ url ="git://github.com/idevz/vanilla.git" #必須爲可訪問的在線庫地址 } description ={ summary ="A Lightweight Openresty Web Framework", homepage ="http://idevz.github.io/vanilla", maintainer ="zhoujing<zhoujing00k@gmail.com>", license ="MIT" #必須指明所基於的開源協議 } dependencies ={ "lua=5.1", ... ... "lua-resty-http=0.06-0" } build ={ type ="builtin", modules ={ ["vanilla.v.view"] ="vanilla/v/view.lua", ... ... ["vanilla.v.views.rtpl"] ="vanilla/v/views/rtpl.lua", }, install ={ bin ={ "bin/vanilla" } }, }