跳到正文
本頁目錄

管理套件

讀完本頁,你就能用 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:// 來指定它:

sh
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 壓縮檔:

sh
lip install https://example.com/downloads/my-mod.zip

以 http:// 或其他協議開頭的地址會被拒絕。

磁碟上的 ZIP 檔案或資料夾

給出根目錄下有 lip.toml 的 ZIP 檔案或資料夾的路徑:

Windows
lip install .\my-mod.zip
lip install D:\downloads\my-mod.zip
lip install ..\MyMod

想確保 lip 把一個名字當作路徑而不是儲存庫,請以 ./ 或 ../(Windows 上是 .\ 或 ..\)開頭,或者寫絕對路徑。URL 和路徑後面同樣可以跟變體,例如 ./my-mod.zip#lua。

確切的規則見命令行。

安裝

lip install 接受一個或多個套件:

sh
lip install LegacyScriptEngine#lua LegacyMoney

lip 會找出一組彼此兼容、也與你的遊戲和載入器兼容的版本,下載它們,並連同相依一起安裝。最後輸出:

text
✓ Packages installed successfully.

需要知道的幾點:

  • 模組需要遊戲。 在沒有遊戲的工作區裡安裝模組會失敗,並提示 lip setup。
  • 重複安裝已由你安裝的套件會失敗。 lip 會提示改用 lip update,更換版本用的是那條命令。
  • 相依可以變成由你安裝的套件。 點名安裝它即可。lip 會記下你想要它,這樣即使沒有別的套件需要,它也會留下。
  • 遊戲和載入器保持不變。 如果某個套件需要的遊戲或載入器與工作區現有的不同,命令會失敗,並提示 lip setup。例外:lip install LeviLamina,或者點名遊戲 github.com/LiteLDev/bds 的安裝,本身就是一次伺服器安裝。見用命令管理伺服器。

列出

lip list 按這兩組顯示已安裝的套件:

sh
lip list
text
User-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:

sh
lip list --json

lip list 唯讀不寫。別的命令正在變更工作區時、伺服器執行時,它都能用。

更新

不帶名字的 lip update 會更新由你安裝的每個套件:

sh
lip update

帶上名字,就只更新這些套件:

sh
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 接受已安裝套件的名字:

sh
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。

sh
lip update --dry-run

試執行會做真實命令在「開始改動」之前所做的一切。它讀取工作區,向網路查詢版本,選定要安裝的套件,並檢查它們的檔案能否放置。然後它把計劃告訴你,就此停下:

text
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 會說明出了什麼問題、你可以怎麼辦,並儲存一份失敗報告。見故障排查。

接下來