@lark-apaas/openclaw-dev-cli 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -0
- package/dist/index.js +22 -22
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# @lark-apaas/openclaw-dev-cli
|
|
2
|
+
|
|
3
|
+
OpenClaw 应用开发 CLI,管理应用的创建、关联和部署。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
无需安装,通过 npx 直接使用:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx --yes @lark-apaas/openclaw-dev-cli <command> [options]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 命令
|
|
14
|
+
|
|
15
|
+
### init — 初始化应用
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 从模板创建新应用
|
|
19
|
+
npx --yes @lark-apaas/openclaw-dev-cli init --template <html|nextjs-static|nextjs> --dir <path>
|
|
20
|
+
|
|
21
|
+
# clone 后初始化
|
|
22
|
+
npx --yes @lark-apaas/openclaw-dev-cli init --dir <path>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
| 选项 | 说明 | 默认值 |
|
|
26
|
+
|------|------|--------|
|
|
27
|
+
| `--dir <path>` | 项目目录 | `.` |
|
|
28
|
+
| `--template <template>` | 模板类型(无代码时必须) | - |
|
|
29
|
+
| `--title <title>` | 应用名称 | 目录名 |
|
|
30
|
+
| `--description <desc>` | 应用描述 | `""` |
|
|
31
|
+
| `--template-version <version>` | 模板包版本 | `latest` |
|
|
32
|
+
| `--skip-install` | 跳过依赖安装 | `false` |
|
|
33
|
+
|
|
34
|
+
### link — 关联已有项目
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx --yes @lark-apaas/openclaw-dev-cli link --app-id <id> --template <type>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
| 选项 | 说明 | 默认值 |
|
|
41
|
+
|------|------|--------|
|
|
42
|
+
| `--dir <path>` | 项目目录 | `.` |
|
|
43
|
+
| `--app-id <id>` | 要关联的应用 ID | 不传则自动注册 |
|
|
44
|
+
| `--template <template>` | 技术栈类型 | 从 package.json mclaw 字段读取 |
|
|
45
|
+
| `--title <title>` | 应用名称 | 目录名 |
|
|
46
|
+
| `--description <desc>` | 应用描述 | `""` |
|
|
47
|
+
|
|
48
|
+
### deploy — 部署应用
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx --yes @lark-apaas/openclaw-dev-cli deploy
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
| 选项 | 说明 | 默认值 |
|
|
55
|
+
|------|------|--------|
|
|
56
|
+
| `--dir <path>` | 项目目录 | `.` |
|
|
57
|
+
| `--skip-build` | 跳过构建 | `false` |
|
|
58
|
+
|
|
59
|
+
## 全局选项
|
|
60
|
+
|
|
61
|
+
| 选项 | 说明 |
|
|
62
|
+
|------|------|
|
|
63
|
+
| `--canary <env>` | 设置 canary 泳道 |
|
|
64
|
+
| `-V, --version` | 输出版本号 |
|
|
65
|
+
|
|
66
|
+
## 支持的技术栈
|
|
67
|
+
|
|
68
|
+
| 模板 | 说明 |
|
|
69
|
+
|------|------|
|
|
70
|
+
| `html` | 纯 HTML + Tailwind CDN |
|
|
71
|
+
| `nextjs-static` | Next.js Pages Router,静态导出 |
|
|
72
|
+
| `nextjs` | Next.js App Router 全栈 |
|
|
73
|
+
|
|
74
|
+
## 环境配置
|
|
75
|
+
|
|
76
|
+
在项目目录下创建 `.env` 文件:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
FORCE_AUTHN_INNERAPI_DOMAIN=<API域名>
|
|
80
|
+
FORCE_AUTHN_ACCESS_KEY=<AK>
|
|
81
|
+
FORCE_AUTHN_ACCESS_SECRET=<SK>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -7288,7 +7288,7 @@ var initCommand = {
|
|
|
7288
7288
|
const hasPackageJson = import_node_fs9.default.existsSync(import_node_path12.default.join(projectDir, "package.json"));
|
|
7289
7289
|
const existingMeta = readSparkMeta(projectDir);
|
|
7290
7290
|
const title = options.title ?? import_node_path12.default.basename(projectDir);
|
|
7291
|
-
let stackVersion = existingMeta.
|
|
7291
|
+
let stackVersion = existingMeta.stackVersion;
|
|
7292
7292
|
if (!hasPackageJson) {
|
|
7293
7293
|
if (!options.template) {
|
|
7294
7294
|
throw new Error(
|
|
@@ -7325,7 +7325,7 @@ Available: ${TEMPLATE_TYPES.join(", ")}`
|
|
|
7325
7325
|
"Cannot determine stack type. Please provide --template or ensure package.json has mclaw.stack field."
|
|
7326
7326
|
);
|
|
7327
7327
|
}
|
|
7328
|
-
let appId = options.appId ?? existingMeta.
|
|
7328
|
+
let appId = options.appId ?? existingMeta.appId;
|
|
7329
7329
|
if (!appId) {
|
|
7330
7330
|
const result = await createSubApp({
|
|
7331
7331
|
name: title,
|
|
@@ -7337,13 +7337,13 @@ Available: ${TEMPLATE_TYPES.join(", ")}`
|
|
|
7337
7337
|
console.log(`Using existing app_id: ${appId}`);
|
|
7338
7338
|
}
|
|
7339
7339
|
writeSparkMeta(projectDir, {
|
|
7340
|
-
|
|
7340
|
+
appId,
|
|
7341
7341
|
stack,
|
|
7342
|
-
|
|
7342
|
+
stackVersion: stackVersion ?? "0.1.0"
|
|
7343
7343
|
});
|
|
7344
7344
|
if (!options.skipInstall) {
|
|
7345
7345
|
console.log("\nInstalling dependencies...");
|
|
7346
|
-
(0, import_node_child_process2.execSync)("
|
|
7346
|
+
(0, import_node_child_process2.execSync)("npm install", {
|
|
7347
7347
|
cwd: projectDir,
|
|
7348
7348
|
stdio: "inherit"
|
|
7349
7349
|
});
|
|
@@ -7399,9 +7399,9 @@ Available: ${TEMPLATE_TYPES.join(", ")}`
|
|
|
7399
7399
|
console.log(`Using app_id: ${appId}`);
|
|
7400
7400
|
}
|
|
7401
7401
|
writeSparkMeta(projectDir, {
|
|
7402
|
-
|
|
7402
|
+
appId,
|
|
7403
7403
|
stack,
|
|
7404
|
-
|
|
7404
|
+
stackVersion
|
|
7405
7405
|
});
|
|
7406
7406
|
if (import_node_fs10.default.existsSync(pkgPath)) {
|
|
7407
7407
|
const pkg = JSON.parse(import_node_fs10.default.readFileSync(pkgPath, "utf-8"));
|
|
@@ -7555,28 +7555,28 @@ var deployCommand = {
|
|
|
7555
7555
|
throw new Error('.spark/meta.json not found. Run "mclaw-dev init" first.');
|
|
7556
7556
|
}
|
|
7557
7557
|
const meta = JSON.parse(import_node_fs13.default.readFileSync(metaPath, "utf-8"));
|
|
7558
|
-
if (!meta.
|
|
7558
|
+
if (!meta.appId || !meta.stack) {
|
|
7559
7559
|
throw new Error('.spark/meta.json is incomplete. Run "mclaw-dev init" to fix.');
|
|
7560
7560
|
}
|
|
7561
|
-
const publishResult = await createPublish(meta.
|
|
7561
|
+
const publishResult = await createPublish(meta.appId);
|
|
7562
7562
|
console.log(`Version: ${publishResult.version}, PublishID: ${publishResult.publishID}`);
|
|
7563
7563
|
console.log("\nPreparing upload credentials...");
|
|
7564
|
-
const artifactCredential = await genArtifactUploadCredential(meta.
|
|
7565
|
-
const bucketId = await getDefaultBucketId(meta.
|
|
7566
|
-
const preUploadResult = await preUploadStatic(meta.
|
|
7564
|
+
const artifactCredential = await genArtifactUploadCredential(meta.appId, String(publishResult.version));
|
|
7565
|
+
const bucketId = await getDefaultBucketId(meta.appId);
|
|
7566
|
+
const preUploadResult = await preUploadStatic(meta.appId, bucketId);
|
|
7567
7567
|
console.log(`Static prefix: ${preUploadResult.downloadURLPrefix}`);
|
|
7568
7568
|
if (!options.skipBuild) {
|
|
7569
|
-
const cdnDomain = buildCdnDomain(meta.
|
|
7569
|
+
const cdnDomain = buildCdnDomain(meta.appId, publishResult.version);
|
|
7570
7570
|
const buildEnv = {
|
|
7571
7571
|
...process.env,
|
|
7572
|
-
MCLAW_APP_ID: meta.
|
|
7572
|
+
MCLAW_APP_ID: meta.appId,
|
|
7573
7573
|
MCLAW_VERSION: String(publishResult.version),
|
|
7574
7574
|
MCLAW_STACK: meta.stack,
|
|
7575
7575
|
MCLAW_CDN_DOMAIN: cdnDomain,
|
|
7576
7576
|
MCLAW_STATIC_PREFIX: preUploadResult.downloadURLPrefix
|
|
7577
7577
|
};
|
|
7578
7578
|
console.log("\nBuilding...");
|
|
7579
|
-
console.log(` MCLAW_APP_ID=${meta.
|
|
7579
|
+
console.log(` MCLAW_APP_ID=${meta.appId}`);
|
|
7580
7580
|
console.log(` MCLAW_VERSION=${publishResult.version}`);
|
|
7581
7581
|
console.log(` MCLAW_STACK=${meta.stack}`);
|
|
7582
7582
|
console.log(` MCLAW_CDN_DOMAIN=${cdnDomain}`);
|
|
@@ -7591,7 +7591,7 @@ var deployCommand = {
|
|
|
7591
7591
|
console.log("Build output validated.");
|
|
7592
7592
|
uploadOutput({
|
|
7593
7593
|
projectDir,
|
|
7594
|
-
appId: meta.
|
|
7594
|
+
appId: meta.appId,
|
|
7595
7595
|
version: publishResult.version,
|
|
7596
7596
|
validated,
|
|
7597
7597
|
artifactCredential,
|
|
@@ -7599,7 +7599,7 @@ var deployCommand = {
|
|
|
7599
7599
|
});
|
|
7600
7600
|
if (validated.hasOutputStatic) {
|
|
7601
7601
|
console.log("\nNotifying upload complete...");
|
|
7602
|
-
const callbackResult = await callbackStatic(meta.
|
|
7602
|
+
const callbackResult = await callbackStatic(meta.appId, bucketId, preUploadResult.uploadID);
|
|
7603
7603
|
console.log(`Uploaded ${callbackResult.attachments.length} static files.`);
|
|
7604
7604
|
}
|
|
7605
7605
|
let routesConfig;
|
|
@@ -7608,18 +7608,18 @@ var deployCommand = {
|
|
|
7608
7608
|
routesConfig = import_node_fs13.default.readFileSync(routesPath, "utf-8");
|
|
7609
7609
|
console.log("Found routes.json, including in publish.");
|
|
7610
7610
|
}
|
|
7611
|
-
const publishUpdateResult = await updatePublish(meta.
|
|
7611
|
+
const publishUpdateResult = await updatePublish(meta.appId, {
|
|
7612
7612
|
publishID: publishResult.publishID,
|
|
7613
7613
|
routesConfig
|
|
7614
7614
|
});
|
|
7615
|
-
const appUrl = publishUpdateResult.onlineURL || buildAppUrl(meta.
|
|
7615
|
+
const appUrl = publishUpdateResult.onlineURL || buildAppUrl(meta.appId);
|
|
7616
7616
|
writeSparkMeta(projectDir, {
|
|
7617
7617
|
...meta,
|
|
7618
|
-
|
|
7618
|
+
appUrl
|
|
7619
7619
|
});
|
|
7620
7620
|
console.log(`
|
|
7621
7621
|
\u2705 Deployed successfully!`);
|
|
7622
|
-
console.log(` App ID: ${meta.
|
|
7622
|
+
console.log(` App ID: ${meta.appId}`);
|
|
7623
7623
|
console.log(` Version: ${publishResult.version}`);
|
|
7624
7624
|
console.log(` URL: ${appUrl}`);
|
|
7625
7625
|
});
|
|
@@ -7653,7 +7653,7 @@ function loadEnvFile(filePath) {
|
|
|
7653
7653
|
}
|
|
7654
7654
|
}
|
|
7655
7655
|
loadEnvFile(import_node_path17.default.join(process.cwd(), ".env"));
|
|
7656
|
-
var VERSION = "0.1.
|
|
7656
|
+
var VERSION = "0.1.4";
|
|
7657
7657
|
var cli = new OpenClawCLI(VERSION);
|
|
7658
7658
|
cli.useAll(commands);
|
|
7659
7659
|
cli.run();
|