Lua 包管理工具 Luarocks 詳解

高效Lua包管理工具Luarocks

討論話題

  1. 什麼是 Luarocksgit

  2. 源碼安裝部署 Luarocksgithub

  3. 註冊 Luarocks 爲 Lua 社區貢獻本身的代碼macos

  4. Luarocks 使用初探bootstrap

什麼是 Luarocks

Luarocks 是一個 Lua 包管理器,基於 Lua 語言開發,提供一個命令行的方式來管理 Lua 包依賴、安裝第三方 Lua 包等,社區比較流行的包管理器之一,另還有一個 LuaDist,Luarocks 的包數量比 LuaDist 多,更細節的二者對比可參閱 這裏api

源碼安裝部署 Luarocks

(爲什麼使用源碼見 此文bash

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 查看所支持的安裝配置,這裏咱們主要關注如下兩個服務器

--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 安裝路徑。網絡

爲什麼強調設置 --prefix

設置 prefix 會自動將 Luarocks 以及日後使用 Luarocks 安裝的 Lua 包,LuaC 包都安裝到 Luarocks 安裝路徑下的相應位置,不然相關的包文件散落在文件系統中,顯得雜亂不便於管理,若是所安裝的 Lua 模板包含 bin 文件,則會自動安裝到此目錄下的 bin 路徑,與 Luarocks 可執行文件同一路徑,更便於管理、使用。app

./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 技術發展驚人的快,很大程度上與開源社區的快速發展有直接關係,你們一塊兒分享知識、經驗、解決方案,互相支持、協做。咱們從社區汲取營養,學習成長,回過頭來咱們也須要回饋社區,這纔是一個良性循環。

使用 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個段。

  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,默認的 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 命令,看字面意思就很明白是用來搜索模塊的,使用相對比較簡單也容易理解,相似的命令還有 downloadhelpinstalllistnew_versionremoveupload 等,可是餘下的幾個命令也很重要,使用起來就不是那麼好理解,下面以一個 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 包本地並無安裝,則會到服務器(#server)上搜尋。

 ~/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) 過的 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" }
    },
}
相關文章
相關標籤/搜索