管理套件
讀完本頁,你就能用 lip 命令安裝、列出、更新和解除安裝套件,用 lip 認識的每一種寫法指定一個套件,並在命令真正動手之前先看看它會做什麼。在介面裡,同樣的事在模組和取得模組頁面完成。
什麼是套件
套件是 lip 往工作區裡安裝的任何東西:模組、載入器、遊戲,或者別的套件需要的一組檔案。本頁的每條命令都要在伺服器的資料夾(工作區)裡執行。
lip 把已安裝的套件分成兩組:
- 由你安裝的套件。 你在
lip setup或lip install裡點名的套件。在你解除安裝之前,lip 會一直保留它們。 - 相依。 因為別的套件需要而被 lip 裝上的套件。沒有套件再需要它們時,lip 會自動移除。
模組需要伺服器。請先安裝一個:見用命令管理伺服器。
指定一個套件
套件是用它的出處來指定的,也就是它的來源。來源有四種:
| 來源 | 例子 |
|---|---|
| git 儲存庫 | github.com/LiteLDev/LegacyScriptEngine |
| 網上的 ZIP 檔案 | https://example.com/downloads/my-mod.zip |
| 磁碟上的 ZIP 檔案 | ./my-mod.zip |
| 磁碟上的資料夾 | ../MyMod |
git 儲存庫
大多數套件都放在 git 儲存庫裡,多數在 GitHub 上。用儲存庫地址去掉 https:// 來指定它:
lip install github.com/LiteLDev/LegacyScriptEngine#lua地址後面還可以跟三樣東西:
- 簡稱。 不含
/的名字表示github.com/LiteLDev/下的儲存庫。LeviLamina就是github.com/LiteLDev/LeviLamina。 - 變體,寫在
#後面。有些套件有幾種不同的版本形式,並給每一種起了名字。LegacyScriptEngine#lua是 LegacyScriptEngine 的 Lua 變體。套件的頁面會說明它有哪些變體。 - 引用,寫在
@後面。它決定安裝儲存庫的哪個狀態:
| 引用 | 安裝的是 | 例子 |
|---|---|---|
| 不寫 | 能在你的工作區裡使用的最新正式版本 | lip install LegacyScriptEngine#lua |
@<version> | 恰好那個版本 | lip install LegacyScriptEngine#lua@0.13.1 |
@branch:<name> | 某個分支的最新提交 | lip install github.com/user/repo@branch:main |
@tag:<name> | 任意標籤所指的提交 | lip install github.com/user/repo@tag:nightly |
@rev:<commit> | 某一個提交,用完整的 40 位 ID 指定 | lip install github.com/user/repo@rev:0123456789abcdef0123456789abcdef01234567 |
儲存庫的正式版本,是它名為 v 加版本號的那些標籤,例如 v1.2.3。寫版本時不帶 v。
只支援公開儲存庫。lip 不需要安裝 git。
網上的 ZIP 檔案
給出以 https:// 開頭的完整地址。檔案必須是根目錄下有 lip.toml 的 ZIP 壓縮檔:
lip install https://example.com/downloads/my-mod.zip以 http:// 或其他協議開頭的地址會被拒絕。
磁碟上的 ZIP 檔案或資料夾
給出根目錄下有 lip.toml 的 ZIP 檔案或資料夾的路徑:
lip install .\my-mod.zip
lip install D:\downloads\my-mod.zip
lip install ..\MyModlip install ./my-mod.zip
lip install ~/downloads/my-mod.zip
lip install ../MyMod想確保 lip 把一個名字當作路徑而不是儲存庫,請以 ./ 或 ../(Windows 上是 .\ 或 ..\)開頭,或者寫絕對路徑。URL 和路徑後面同樣可以跟變體,例如 ./my-mod.zip#lua。
確切的規則見命令行。
安裝
lip install 接受一個或多個套件:
lip install LegacyScriptEngine#lua LegacyMoneylip 會找出一組彼此兼容、也與你的遊戲和載入器兼容的版本,下載它們,並連同相依一起安裝。最後輸出:
✓ Packages installed successfully.需要知道的幾點:
- 模組需要遊戲。 在沒有遊戲的工作區裡安裝模組會失敗,並提示
lip setup。 - 重複安裝已由你安裝的套件會失敗。 lip 會提示改用
lip update,更換版本用的是那條命令。 - 相依可以變成由你安裝的套件。 點名安裝它即可。lip 會記下你想要它,這樣即使沒有別的套件需要,它也會留下。
- 遊戲和載入器保持不變。 如果某個套件需要的遊戲或載入器與工作區現有的不同,命令會失敗,並提示
lip setup。例外:lip install LeviLamina,或者點名遊戲github.com/LiteLDev/bds的安裝,本身就是一次伺服器安裝。見用命令管理伺服器。
列出
lip list 按這兩組顯示已安裝的套件:
lip listUser-Requested
├── github.com/LiteLDev/bds@<version>
├── github.com/LiteLDev/LeviLamina@<version>
└── github.com/LiteLDev/LegacyScriptEngine#lua@<version>
Dependencies
├── github.com/LiteLDev/LegacyRemoteCall@<version>
└── …每一行是一個套件的名字,# 後面是變體,@ 後面是版本。遊戲是 github.com/LiteLDev/bds。
給指令碼用時,可以要求輸出 JSON:
lip list --jsonlip list 唯讀不寫。別的命令正在變更工作區時、伺服器執行時,它都能用。
更新
不帶名字的 lip update 會更新由你安裝的每個套件:
lip update帶上名字,就只更新這些套件:
lip update LegacyScriptEngine#lua「更新」的含義取決於套件當初是怎麼安裝的:
| 安裝自 | 更新後得到 |
|---|---|
| 儲存庫,沒有引用 | 能在你的工作區裡使用的最新正式版本 |
儲存庫 @<version> | 同一個版本。這個套件被固定了。 |
儲存庫 @rev:<commit> | 同一個提交。這個套件被固定了。 |
儲存庫 @branch:<name> | 分支現在所指的提交 |
儲存庫 @tag:<name> | 標籤現在所指的提交 |
| URL | 重新下載的檔案 |
| 磁碟上的路徑 | 重新讀取的檔案或資料夾 |
只有當 lip 找到的東西與已安裝的不同時,才會取代這個套件。否則不動它。
還需要知道:
- 更換或固定版本:點名版本即可,例如
lip update LegacyScriptEngine#lua@0.13.1。這樣也能回到舊版本。之後這個套件就停在該版本上。 - 取消固定:點名這個套件但不寫引用,例如
lip update LegacyScriptEngine#lua。它會重新跟隨正式版本。 - 相依只做必要的變動。 除非由你安裝的某個套件需要,否則 lip 不會把相依升到更新的版本。
lip update從不更新遊戲和載入器。 點名它們會失敗。請用lip setup變更:見變更遊戲版本。- 來自某個路徑、而該路徑已不存在的套件會被保留。 不帶名字的
lip update會給出警告,並讓它保持原樣。 - 點名的套件必須已經安裝。 它們會變成由你安裝的套件。
解除安裝
lip uninstall 接受已安裝套件的名字:
lip uninstall LegacyMoney可以按 lip list 顯示的寫法(去掉版本)來指定一個套件,也可以用安裝時的來源。不帶變體的名字會符合這個套件所有已安裝的變體。
lip 會刪除這個套件安裝的檔案,然後刪除所有不再被需要的相依。
需要知道的幾點:
- 只能解除安裝由你安裝的套件。 相依會在需要它的套件都解除安裝後自行消失。
- 仍被別的套件需要的套件會留下,變成相依。lip 會說明:
<name> is still required by other packages; keeping it as a dependency. - 你可能改過的檔案會被保留,前提是套件這樣聲明瞭。例如,解除安裝遊戲會保留
server.properties。見保留什麼刪除什麼。 - 遊戲和載入器可以像其他套件一樣解除安裝。 沒有遊戲的工作區就沒有伺服器可執行。
試執行
每條會變更工作區的命令都接受 --dry-run(簡寫 -n):lip setup、lip install、lip update 和 lip uninstall。
lip update --dry-run試執行會做真實命令在「開始改動」之前所做的一切。它讀取工作區,向網路查詢版本,選定要安裝的套件,並檢查它們的檔案能否放置。然後它把計劃告訴你,就此停下:
Dry run: would uninstall LegacyMoney 0.16.1 (1 file)
Dry run: would uninstall LegacyRemoteCall 0.13.0 (1 file)
Dry run: nothing was changed.試執行保證:
- 什麼都不改。 工作區、快取和設定裡的任何檔案都不會被建立、修改或刪除。唯一的例外是試執行自己失敗時寫下的失敗報告。
- 什麼都不執行。 不執行套件裡的任何程式,也不往系統裡安裝任何東西。
- 什麼都不問。 真實命令會向你提問的地方,例如 Minecraft EULA,或者安裝伺服器前要解除安裝模組時,試執行只會說明它會問。
- 不等待其他命令。 它不加鎖,所以別的 lip 命令正在變更工作區時它也能執行。
- 仍然需要網路,耗時可能和真實命令走到那一步時一樣長。
試執行成功,並不保證真實命令也會成功:網路、磁碟或工作區在這期間都可能變化。試執行失敗,則說明了真實命令會失敗的原因。
如果之前有命令被中斷,試執行會告訴你,並按工作區現在的樣子做計劃。見當機或斷電之後。
介面在每次變更之前都會替你做一次試執行:你在選擇「套用」之前看到的計劃,就是這個計劃。
命令失敗或被取消時
會變更工作區的命令,要麼做完全部工作,要麼什麼都不做。
- 在改動之前就失敗:問題能提前發現時就是這樣,例如套件不存在、版本彼此不兼容、下載失敗、某個檔案歸別的套件所有。工作區原封不動。
- 中途失敗,例如某個檔案寫不進去。lip 會復原它做過的每一處變更,工作區回到命令執行之前的樣子。
- 你按了 Ctrl+C。 lip 還在準備時,會立刻停下。lip 正在變更工作區時,它會取消操作、復原變更,並輸出
Cancelled. Any changes to the workspace were undone.。再按一次 Ctrl+C 會立刻結束 lip,由下一條命令來收拾。
有一樣東西無法復原:套件在安裝過程中執行的程式已經做過的事。
失敗之後,lip 會說明出了什麼問題、你可以怎麼辦,並儲存一份失敗報告。見故障排查。