Lua包管理工具Luarocks詳解

高效Lua包管理工具Luarocks ####討論話題git

  1. 什麼是Luarocks
  2. 源碼安裝部署Luarocks
  3. 註冊Luarocks爲Lua社區貢獻本身的代碼
  4. Luarocks使用初探

####什麼是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社區貢獻代碼很是簡單,只需以下幾步:框架

  1. 官網註冊一個luarocks帳號
  2. 在官網<a name="api-key">設置頁面生成API-Keys(用做包提交的驗證)
  3. 在項目根目錄根據rockspec文件格式書寫你本身的rockspec文件(或者在項目根目錄運行luarocks write_rockspec命令自動生成)
  4. 使用API-key上傳你的項目到luarocks.org(命令行運行luarocks upload --api-key=
  5. 在你的項目頁面點擊下圖所示的 Add To Manifest將你的項目添加到相關分類方便分類檢索,默認已經在root裏。

將你的項目添加到相關分類 ####Luarocks使用初探 命令行運行luarocks,或者luarocks help能看到相關luarocks的詳細信息,大體分爲如下6個段。curl

  1. NAME/名稱 顯示Luarocks說明信息 - LuaRocks main command-line interface
  2. SYNOPSIS/概要 顯示luarocks命令參數使用格式: luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
  3. GENERAL OPTIONS/通用選項 被全部命令所支持的選項,包含指定搜索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" }
    },
}
相關文章
相關標籤/搜索