Nim包管理器--Nimble

Nimble


Nimble是一個非常輕量級的Nim語言的軟件包管理器,它使用你的文件系統來確定已經安裝的包。它的重點是易於實現,所以即使出了一些錯誤,它也很容易規避。它支持3個主要的操作系統,並且也可以工作在鮮爲人知的系統上。


安裝包下載:https://github.com/nim-lang/nimble


1.安裝

你需要0.9.6或者更高版本的Nim編譯器(OSX用戶必須使用開發版本0.10.1或者更高)。要運行nimble你將需要已安裝一些工具,它依賴於檢查源代碼。例如,如果包託管在Github上,你需要安裝git添加到你的環境PAHT。與託管在Bitbucket上的Mercurial倉庫一樣。在Windows上爲了安全的網絡鏈接你需要OpenSSL DLLs


1.1 Unix

在Unix操作系統上,使用兩條簡單的命令就可以編譯以及安裝Nimble。在成功的取得最新的Nim編譯器之後,簡單的執行下面的命令來克隆nimble,編譯它然後安裝它。

git clone https://github.com/nim-lang/nimble.git
cd nimble
nim c -r src/nimble install

在這些步驟之後,nimble應該已經編譯和安裝。你應該添加~/.nimble/bin到你的$PATH。通過執行nimble install nimble可以更新nimble。


1.2 Windows

你可以通過一個預構建安裝可以在發佈頁得到的存檔文件或者從源碼安裝。


1.2.1 使用預構建存檔文件

發佈頁面下載最新版本的存檔文件。這個存檔文件將有一個nimble-x_win32形式的文件名,x是當前版本號。

下載文檔並解壓,然後執行install.bat文件。重要的一點是該安裝要求在你的PATH中有Nim編譯器。一旦安裝完成,你應該將C:\Users\YourName\.nimble\bin添加到你的PATH。


1.2.2 From source

在windows上從源安裝Nimble是稍微複雜的:

git clone https://github.com/nim-lang/nimble.git
cd nimble
nim c src/nimble
cp src/nimble.exe src/nimble1.exe
src/nimble1.exe install

這是有必要的,因爲在將要運行和安裝期間Windows將鎖定進程,Nimble將重新編譯它本身。一旦完成安裝你應該添加C:\Users\YourName\.nimble\bin到你的PATH。


2.Nimble的文件夾結構和包

在Unix系統上Nimble將所有已經安裝的軟件存儲在~/.nimble中,windows系統中存儲在$home/.nimble中。庫文件存儲在$nimbleDir/pkgs以及二進制文件存儲在$nimbleDir/bin。大多數Nimble包將提供.nim文件和一些文檔。Nim編譯器會意識到Nimble並且將自動找到模塊,所以你可以import modulename,不用額外的設置就可以工作。


然而,一些Nimble包可以提供額外的工具或命令。如果你不將它們的位置($nimbleDir/bin)添加到你的$PATH,它們將不能工作並且你將無法運行它們。


3.Nimble的用法

一旦在你的系統上安裝了Nimble,你可以運行nimble命令來獲取可用的參數列表。


3.1 nimble update

update命令被用來獲取和更新Nimble packages列表。這沒有自動更新機制,所以你需要自己運行更新命令如果你需要刷新你本地的已知可用的Nimble packages列表。例如:

$ nimble update
Downloading package list from https://.../packages.json
Done.

一些命令可能提醒你運行nimble update或者如果它們失敗將會爲你運行nimble update。

如果你想使用一個第三方軟件包列表,你也可以選擇使用帶有一個URL的update命令。


3.2 nimble install

install命令將下載並安裝一個包。你需要傳遞你想安裝的包名(或者)。如果有任何包依賴於其他的Nimble包,Nimble也將會安裝它們。例如:

$ nimble install nake
Downloading nake into /tmp/nimble/nake...
Executing git...
...
nake installed successfully

Nimble總是獲取和安裝一個包的最新版本。注意:最新的版本是在git(或者hg)倉庫中被定義爲最新標籤的版本,如果包沒有版本標籤,將會安裝遠程倉庫中最新的提交。如果你已經有那個版本,安裝Nmble將會詢問你是否希望它改寫你的本地副本。

你可以強制Nimble從包的倉庫中下載最新提交,例如:

$ nimble install nimgame@#head

當然這是git特性。對於hg使用tip而不是head。一個分支,標籤或者提交哈希也可以在head的位置指定。

替代指定一個版本控制系統分支,你也可以指定一個版本範圍,例如:

$ nimble install nimgame@"> 0.5"

在這種情況下,將會安裝一個高於0.5的版本。

如果沒有指定一個參數,並且在你的當前工作目錄中有一個package.nimble文件,Nimble將安裝駐留在當前工作目錄中的包。這對於正在測試他們本地的.nimble文件,再將它們提交給官方軟件包列表的開發者可能是有用的。有關此更多的信息請看developers.markdown。

也可以指定到一個倉庫的URL,Nimble將會自動檢測url指向的倉庫類型,並安裝它。


3.3 nimble uninstall

uninstall命令卸載已經安裝的包。試圖卸載一個其它包依賴的包是不允許的並且將會導致錯誤。在此之前你必須手動卸載反向依賴。

類似於install命令,你可以指定一個版本範圍,例如:

$ nimble uninstall [email protected]


3.4 nimble build

build命令常用於想要測試構建其.nimble包的開發者。這個命令將會在調試模式下構建包,不會安裝任何東西。install命令將會在發佈模式下構建包。

如果你是一個開發者想要生成新的Nimble packages,詳細信息請閱讀developers.markdown文檔。


3.5 nimble c

c(或者compile,js,cc,cpp)命令可以被開發者用來編譯其包中的單個模塊。所有傳遞給Nimble的選項,在編譯期間都將傳遞給Nim編譯器。

如果指定了c或者compile命令Nimble將使用包中.nimble文件指定的後端。更具體的js,cc,cpp可以用來覆蓋它。


3.6 nimble list

list命令將顯示已知的可用於Nimble的包列表。可以指定一個--ver參數選項用來告訴Nimble查詢遠程git倉庫得到packages的版本列表並打印版本。請注意這可能是緩慢的,因爲每個包必須單獨查詢。


3.7 nimble search

如果你不想查看list命令的全部輸出,你可以使用search命令限定你想篩選的包名或者標籤作爲參數。Nimble將搜索已知的可用軟件包列表,並且僅顯示那些匹配指定關鍵字的記錄(也可能是子串),例如:

$ nimble search math
linagl:
  url:         https://bitbucket.org/BitPuffin/linagl (hg)
  tags:        library, opengl, math, game
  description: OpenGL math library
  license:     CC0

extmath:
  url:         git://github.com/achesak/extmath.nim (git)
  tags:        library, math, trigonometry
  description: Nim math library
  license:     MIT

搜索是不區分大小寫的。

可以指定可選項--ver參數來告訴Nimble查詢遠程git倉庫得到packages的版本列表並打印版本。請注意:這可能是緩慢的,因爲每個包必須分開查詢。


3.8 nimble path

nimble path命令將顯示匹配指定參數已安裝包的絕對路徑。可能同一個已經安裝的包有多個版本,path命令將總是顯示最新的版本。例如:

$ nimble path argument_parser
/home/user/.nimble/pkgs/argument_parser-0.1.2

在Unix下,你可以使用反引號來快速進入一個包的目錄,這對於閱讀綁定文檔非常有用。例如:

$ pwd
/usr/local/bin
$ cd `nimble path argument_parser`
$ less README.md


3.9 nimble init

nimble init命令將啓動一個簡單的嚮導,它將爲你的項目創建一個快速的.nimble文件。


4.配置

在啓動時,在Linux平臺上,Nimble將嘗試讀取~/.config/nimble/nimble.ini(在windows平臺上將嘗試讀取C:\Users\<YourUser>\AppData\Roaming\nimble\nimble.ini)。

此文件的格式對應於一些Nim增強ini格式。例如:

nimbleDir = r"C:\Nimble\"

目前在該文件中,可以配置如下:

nimbleDir - nimble用於安裝包的目錄 默認: ~/.nimble/

chcp - 當執行Nim應用程序包時是否改變當前代碼頁.如果爲true,這將添加chcp 65001到在~/.nimble/bin/中生成的.cmd存根中默認: true


5.創建Packages

相關鏈接:http://blog.csdn.net/dajiadexiaocao/article/details/50009009


Nimble工作在git倉庫中,packages作爲它的主要來源。它的包列表存儲在nim-lang/packages倉庫中可自由訪問的JSON文件中。這個JSON文件提供nimble所需的Git URL用來克隆包並安裝它。安裝和構建命令包含在一個帶有.nimble文件拓展名的ini風格的文件中。nimble文件共享包的名稱,一個命名爲foobar的包應該有一個對應的foobar.nimble文件。


這個文件指定有關該包的信息,包括它的名字,作者,許可證,依賴關係以及更多。沒有該文件,Nimble是不能安裝一個包的。一個最低配置的minmum.nimble文件如下:

[Package]
name          = "ProjectName"
version       = "0.1.0"
author        = "Your Name"
description   = "Example .nimble file."
license       = "MIT"

[Deps]
Requires: "nim >= 0.10.0"

你可以完全忽略依賴。但是推薦指定Nim編譯器需求的最低版本。

Nimble目前支持從一個本地目錄,git倉庫以及一個mercurial倉庫安裝包。.nimble文件必須出現在目錄的根目錄或者將安裝的倉庫中。


5.1 庫文件

庫包可能是Nimble packages最流行的形式。它們意味着被其他庫包或者最終的二進制包使用。


當nimble安裝一個庫時它將複製包中的所有文件到$nimbleDir/pkgs/pkgname-ver。這取決於包創建者確保包目錄佈局是正確的,如此用戶的包纔可以正確的導入到包。


按照慣例,建議的佈局如下。目錄佈局取決於你的包的性質,也就是說,是否你的包僅公開一個模塊或者多個模塊。


如果你的包僅公開一個模塊,該模塊應該出現在你的git倉庫的根目錄(.nimble文件所在的目錄)中,在這種情況下推薦使用你的模塊名與你的包名一致,無論你的包名是什麼。這方面一個很好的例子是jester包公開jester模塊。在這種情況下,使用import jester導入jester包。


如果你的包公開了多個模塊,這些模塊應該在一個PackageName目錄中。這將給予從其它包公開有相同名字的模塊一個特定的隔離措施。在這種情況下,使用import PackageName/module將導入包的模塊。


你可以自由的結合描述的這兩種方法。


有關你不想公開的模塊。你應該將它們放在一個PackageName/private目錄下。然後你的模塊可以使用import PackageName/private/module導入這些私有的模塊。這個目錄結構在將來可能會被強制。


.nimble文件所在目錄下的所有文件和目錄都將被複制,但是你可以通過在你的.nimble文件設置SkipDirs,SkipFiles或者SkipExt選項跳過某些目錄和文件。目錄和文件也可以在一個whitelist基礎上指定,如果你指定InstallDirs,InstallFiles或者InstallExt其中一個,Nimble將只安裝指定的文件。


5.2   二進制文件

這些是應用程序包,它們要求在安裝之前先構建。一個包自動地是一個二進制包只要它至少設置一個bin值,例如這樣:

bin = "main"

在這種情況下當調用nimble install,nimble將會創建main.nim文件,將它複製到$nimbleDir/pkgs/pkgname-ver/,隨後在$nimbleDir/bin/中創建一個二進制的符號鏈接。在windows下,創建一個.bat存根文件。

其他的文件將以同樣的方式被複制,因爲它們是二進制包。


二進制包不能安裝.nim文件,所以在你的.nimble文件中應該包含SkipExt = "nim",除非你打算讓你的包成爲一個binary/library組合,這是代價。


在構建之前,依賴關係自動安裝。在發佈你的包之前,你應該確保你指定的依賴關係是正確的。你可以通過在你的軟件包的目錄中運行nimble build或者nimble install達到檢驗的目的。


5.3 Hybrids

關於庫包和二進制包混合需要注意的一點是,你的二進制將最有可能分享包名。這將意味着,你將不能把你的.nim文件放到pkgname目錄中。目前解決這個問題的慣例是,給名字附加pkg,當做nimble所做的。


5.4 依賴關係

依賴在一個nimble文件的[Deps]部分指定。關鍵字域requires用於指定它們。例如:

[Deps]
Requires: "nim >= 0.10.0, jester > 0.1 & <= 0.5"

依賴列出支持版本範圍。這些版本可能是一個具體的版本如0.1,或者它們可能包含任何,小於(<),大於 (>), 小於或等於 (<=) and 大於或等於 (>=)。使用&操作符可合併兩個版本範圍,例如:> 0.2 & < 1.0將安裝一個版本高於0.2,低於1.0版本的包。


指定一個具體的版本作爲一個依賴不是一個好注意,因爲你的包可能最終取決於同一個包的兩個版本。如果發生這種情況,Nimble將拒絕安裝包。同樣地,你不應該指定一個上限,因爲這樣可以導致同樣的問題。


除版本外,你也可以指定git/hg標籤,分支和提交。然而,這些都必須是具體的。這是用#字符完成,例如:jester#head,它將使你的包依賴於最新提交的Jester。


5.4 Nim編譯器

Nim編譯器不能讀取.nimble文件。它對Nimble的瞭解限制於nimblePaths功能,這允許它當編譯你的軟件時在Nimble的包目錄中使用packages。這意味着它不能解決依賴關係,以及它僅可以在編譯時使用最新版本的包。


當Nimble創建你的包時它實際執行Nim編譯器。它解決了依賴關係並且爲編譯器提供每一個包的路徑,所以,它準確的知道使用哪個版本。


這意味着在開發軟件的時候你可以安全的使用編譯器編譯,但是在發佈之前,你應該使用nimble來創建包,已確保你所指定的依賴關係是正確的。


5.5 版本

通過git或者mercurial克隆的包的版本由倉庫的標籤決定。


當安裝一個需要下載的包時,在下載完成之後並且如果該包通過一個版本控制系統分配,nimble將會檢查克隆倉庫的標籤列表。如果沒有標籤存在,nimble將簡單的安裝倉庫的HEAD(在mercurial中是tip).如果標籤存在,nimble將試圖尋找類似版本的標籤(e.g. v0.1),然後會找到最新版本的可用標籤,一旦它這樣做,在檢查到最新版本後它將安裝包。


通過在你的依賴列表中包名之後指定#head,你可以強制安裝倉庫的HEAD版本(最新版本)。


6. 將你的包提交到Nimble packages


Nimble packages列表存儲在github上,並且每個人都被鼓勵將自己的包添加到它中!查看nim-lang/packages學習更多。


7 .   .nimble reference 

[Package]

必選項

name - 包名


version - 這個包的當前版本。這應該是遞增的,在使用git tag或者hg tag標記當前版本之後。


author - 這個包的作者名。


description - 描述這個包的字符串。


license - 該包的許可證名稱。


可選項

SkipDirs - 在安裝期間應該跳過的目錄名列表,用逗號分割。


SkipFiles - 在安裝期間應該跳過的文件名列表,用逗號分割。


SkipExt - 在安裝期間應該跳過的文件拓展名列表,拓展名應該使用不帶引導的.指定,並且應使用逗號分割。


InstallDirs - 應專門安裝的目錄列表,如果這個選項沒有指定任何其他,將安裝除這裏列出的目錄,文件在InstallFiles中列出,在InstallFiles中列出的文件共享在InstallExt,.nimble文件以及二進制文件中列出的文件拓展名。用逗號分割。


InstallFiles - 應專門安裝的文件列表,它補充InstallDirs和InstallExt。只有文件列出在這裏,目錄列在InstallDirs中,在InstallFiles中列出的文件共享在InstallExt,.nimble文件以及二進制文件中列出的文件拓展名。用逗號分割。


InstallExt - 應專門安裝的文件拓展名列表,它補充InstallDirs和InstallFiles。用逗號分割。


srcDir - 指出包含.nim源文件的目錄。默認:.nimble文件所在的目錄;包的根目錄。


binDir - 指定nimble bulid將輸出二進制文件的路徑。默認:.nimble文件所在的目錄;包的根目錄。


bin - 應該使用逗號分開構建並不帶特定的文件拓展名的文件列表。該選項將你的包轉化成一個二進制包,nimble將構建指定的文件並適當的安裝它們。 


backend - 指定後端將用於構建在bin中列出的文件。可能的值包括:c, cc, cpp, objc, js.默認:c


[Deps]/[Dependencies]

可選項

requires - 指定一個有可選版本範圍的包名列表,用逗號分割。例如:nim >= 0.10.0, jester;使用這個值你的包將取決於nim的0.10.0版本或者更高,以及任何版本的jester.


8.貢獻

如果你願意幫助,自由fork,做任何你認爲合適的補充,然後發送一個pull request.

關於這個項目,如果你有任何問題,你可以直接在github向提問,在Nim論壇上提問,或者在Freenode in the #nim channel上提問。


9.關於

Nimble由Dominik Picheta完成,得到了來自一些貢獻者的幫組。它在BSD許可證下授權(更多信息查看license.txt)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章