跳到主要內容

執行腳本

blocklet exec 命令是一個強大的工具,用於在已安裝的 Blocklet 的即時上下文中執行腳本。這對於資料庫遷移、資料填充或任何需要存取您 Blocklet 執行階段環境變數的一次性腳本來說,都是非常有價值的。

它確保您的腳本與正在執行的應用程式使用相同的設定和密鑰,使管理和偵錯任務更加簡單可靠。

運作方式

當您執行 blocklet exec 時,CLI 會連接到您正在執行的 Blocklet Server,擷取指定 Blocklet 實例的環境變數,然後在一個注入了這些變數的新行程中執行您的腳本。這讓您的腳本能夠連接到與您的 Blocklet 相同的資料庫、服務和 API。

Execute Script

用法

要執行腳本,您必須提供腳本的路徑和目標 Blocklet 實例的 DID。

命令語法

bash
blocklet exec <path-to-script> [options]

先決條件

  1. Blocklet Server 必須正在執行

    該命令需要與伺服器通訊以擷取環境。如果它沒有執行,請使用 blocklet server start 啟動它。

  2. Blocklet 必須已安裝

    --app-id 識別的 Blocklet 必須已經安裝在伺服器上。

參數與選項

  • path-to-script string (required) — 您要執行的 Node.js 腳本的相對路徑。
  • --app-id string (required) — 腳本應在哪個 Blocklet 實例中執行的 DID。如果未提供,CLI 將尋找 BLOCKLET_DEV_APP_DID 環境變數。
  • --timeout number (default: 1800) — 腳本的最長執行時間,以秒為單位。預設為 30 分鐘(1800 秒)。

範例

假設您有一個腳本來檢查您正在執行的 Blocklet 的一些關鍵環境變數。

首先,建立腳本檔案:

scripts/check-env.js

javascript
// 此腳本將在 Blocklet 的上下文中執行
// 並且可以存取其所有環境變數。

console.log('--- 在 Blocklet 上下文中執行腳本 ---');

const appName = process.env.BLOCKLET_APP_NAME;
const appPort = process.env.BLOCKLET_PORT;

if (appName && appPort) {
  console.log(`成功存取環境變數:`);
  console.log(`- Blocklet 名稱: ${appName}`);
  console.log(`- Blocklet 連接埠: ${appPort}`);
} else {
  console.error('無法存取 Blocklet 環境變數。');
  process.exit(1);
}

console.log('--- 腳本執行完畢 ---');
process.exit(0);

現在,使用 blocklet exec 命令執行腳本。請務必將 z2qa... 替換為您實際的 Blocklet 實例 DID。

執行腳本

bash
blocklet exec scripts/check-env.js --app-id z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8

您應該會看到類似這樣的輸出,確認腳本已存取 Blocklet 的環境:

預期輸出

text
info 嘗試為 blocklet(z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8) 執行腳本 (timeout: 1800000ms)
--- 在 Blocklet 上下文中執行腳本 ---
成功存取環境變數:
- Blocklet 名稱: My Awesome App
- Blocklet 連接埠: 3030
--- 腳本執行完畢 ---
success 完成!

執行元件的腳本

如果您目前的工作目錄包含一個屬於較大 Blocklet 的元件的 blocklet.yml 檔案,blocklet exec 將會智慧地偵測到這一點。它會自動在該元件特定的環境上下文中執行腳本,該上下文包含來自父 Blocklet 和元件本身的變數。

常見用例

資料庫遷移

在類生產環境中執行腳本來更新您的資料庫結構或應用遷移。

資料填充

使用可以存取資料庫連線詳細資訊的腳本,為您的資料庫填充初始或測試資料。

管理任務

執行一次性的管理任務,例如重設使用者密碼或清理舊記錄。

偵錯

執行偵錯腳本以檢查正在執行的 Blocklet 的狀態或環境,而無需停止它。