blocklet exec 命令是一个强大的实用工具,用于在已安装 blocklet 的实时上下文中运行脚本。这对于数据库迁移、数据填充或任何需要访问 blocklet 运行时环境变量的一次性脚本等任务来说非常有价值。
它确保你的脚本使用与正在运行的应用程序相同的配置和密钥来运行,从而使管理和调试任务变得更简单、更可靠。
工作原理
当你运行 blocklet exec 时,CLI 会连接到你正在运行的 Blocklet Server,检索指定 blocklet 实例的环境变量,然后在注入这些变量的新进程中执行你的脚本。这使得你的脚本能够连接到与你的 blocklet 相同的数据库、服务和 API。

用法
要执行脚本,你必须提供脚本的路径和目标 blocklet 实例的 DID。
命令语法
blocklet exec <path-to-script> [options]前提条件
Blocklet Server 必须正在运行
该命令需要与服务器通信以获取环境。如果服务器未运行,请使用
blocklet server start启动它。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
// 此脚本将在 blocklet 的上下文中运行
// 并可以访问其所有环境变量。
console.log('--- Executing Script in Blocklet Context ---');
const appName = process.env.BLOCKLET_APP_NAME;
const appPort = process.env.BLOCKLET_PORT;
if (appName && appPort) {
console.log(`Successfully accessed environment variables:`);
console.log(`- Blocklet Name: ${appName}`);
console.log(`- Blocklet Port: ${appPort}`);
} else {
console.error('Could not access blocklet environment variables.');
process.exit(1);
}
console.log('--- Script Finished ---');
process.exit(0);现在,使用 blocklet exec 命令运行该脚本。请确保将 z2qa... 替换为你的实际 blocklet 实例 DID。
执行脚本
blocklet exec scripts/check-env.js --app-id z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8你应该会看到类似以下的输出,确认脚本已访问 blocklet 的环境:
预期输出
info Try to run script for blocklet(z2qaR7iY52Nv9m36m883s9yqjM3aW5tV6c7g8) (timeout: 1800000ms)
--- Executing Script in Blocklet Context ---
Successfully accessed environment variables:
- Blocklet Name: My Awesome App
- Blocklet Port: 3030
--- Script Finished ---
success Done!为组件执行脚本
如果你当前的工作目录包含一个组件的 blocklet.yml 文件,而该组件是一个更大的 blocklet 的一部分,blocklet exec 会智能地检测到这一点。它会自动在组件特定的环境上下文中运行脚本,该上下文包括来自父 blocklet 和组件本身的环境变量。
常见用例
数据库迁移
在类生产环境中运行脚本来更新数据库模式或应用迁移。
数据填充
使用可以访问数据库连接详细信息的脚本,用初始数据或测试数据填充你的数据库。
管理任务
执行一次性管理任务,例如重置用户密码或清理旧记录。
调试
执行调试脚本以检查正在运行的 blocklet 的状态或环境,而无需停止它。