@adep/cli 0.0.8 → 0.0.9

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.
Files changed (3) hide show
  1. package/README.md +30 -9
  2. package/dist/index.js +106 -17
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -133,23 +133,37 @@ adep init --list -s https://platform.example.com
133
133
 
134
134
  ```
135
135
  my-app/
136
- ├── adep.config.ts # 项目标识(dev / deploy 按此识别)
137
- ├── tsconfig.json # 云函数 TypeScript 编辑器配置(strict + noEmit)
138
- ├── adep.d.ts # 云函数上下文环境类型声明(ctx: AdepContext 补全)
136
+ ├── package.json # 应用定义:声明 @adep/cli 版本依赖 + scripts(dev/serve/deploy/web:*/doctor)+ engines
137
+ ├── adep.config.ts # 项目配置:name / template / functionsDir / functions_prefix
138
+ ├── tsconfig.json # 云函数 TypeScript 编辑器配置(strict + noEmit)
139
+ ├── adep.d.ts # 云函数上下文环境类型声明(ctx: AdepContext 补全)
139
140
  ├── functions/
140
- │ ├── hello.ts # 示例函数(deploy 后经 /hello 触发)
141
+ │ ├── hello.ts # 示例函数(deploy 后经 /hello 触发)
141
142
  │ └── README.md
142
- ├── web/ # 前端工程(标准 Vite + Vue 3,与 Web IDE 项目同构)
143
+ ├── web/ # 前端工程(标准 Vite + Vue 3,与 Web IDE 项目同构)
143
144
  │ ├── index.html
144
145
  │ ├── package.json
145
146
  │ ├── vite.config.ts
146
147
  │ └── src/{main.ts, App.vue}
147
148
  ├── database/
148
- │ └── schema.sql # 数据库结构(占位;表由平台控制台 / adep db 管理)
149
+ │ └── schema.sql # 数据库结构(占位;表由平台控制台 / adep db 管理)
149
150
  ├── README.md
150
- └── .gitignore # 已忽略 node_modules/ data/ .adep/
151
+ └── .gitignore # 已忽略 node_modules/ data/ .adep/
151
152
  ```
152
153
 
154
+ **根 package.json**:与导出的离线部署包(`adep export` / 平台自托管导出)的应用定义同构——
155
+ 声明 `@adep/cli` 版本依赖(值来自 CLI 自身发布版本,不硬编码)与常用 scripts:
156
+ `pnpm dev`(= `adep dev`)/ `pnpm serve` / `pnpm deploy` / `pnpm web:dev` / `pnpm web:build` / `pnpm doctor`。
157
+
158
+ **functions_prefix(本地函数路由前缀)**:`adep.config.ts` 的 `functions_prefix` 控制本地
159
+ 调试路由前缀(默认空):
160
+
161
+ - 配置 `functions_prefix: 'api'` 后:`adep dev` 访问路径 `/{fnName}` → `/api/{fnName}`;
162
+ `adep serve` 为 `/api/{fnName}` → `/api/api/{fnName}`(前缀拼接在 `/api/` 之后)。
163
+ - 留空:`adep dev` 为 `/{fnName}`,`adep serve` 为 `/api/{fnName}`。
164
+ - **边界**:只影响本地 HTTP 入口路由;函数互调 `ctx.cloud.invoke('name')` 与线上部署路径
165
+ 按函数名,不随前缀变化(与线上同构)。
166
+
153
167
  **web/ 前端工程**:与 Web IDE 内创建的项目完全同构(同一份模板真相源),可无缝在两端切换开发;
154
168
  本地跑前端:`cd web && npm install && npm run dev`,部署由 `adep deploy` 统一构建发布。
155
169
 
@@ -384,16 +398,23 @@ export ADEP_HOME=~/.adep
384
398
 
385
399
  ### `adep.config.ts`
386
400
 
387
- `adep init` 生成的项目标识文件,CLI 的 `dev` / `deploy` 按此识别项目(CLI 直接 import 后读 `default` 的字段,无需任何辅助包):
401
+ `adep init` 生成的项目配置文件,CLI 的 `dev` / `serve` / `deploy` 按此识别项目(CLI 直接 import 后读 `default` 的字段,无需任何辅助包):
388
402
 
389
403
  ```ts
390
- // adep 项目配置:CLI(dev / deploy)按 default export 读取(name / functionsDir)。
404
+ // adep 项目配置:CLI(dev / serve / deploy)按 default export 读取。
391
405
  export default {
392
406
  name: 'my-app', // 项目名(deploy 的默认 slug)
393
407
  template: 'fullstack', // 模板:empty | function | fullstack
408
+ functionsDir: 'functions', // 云函数目录
409
+ functions_prefix: '', // 本地调试路由前缀(dev: /{prefix}/{fn},serve: /api/{prefix}/{fn};留空保持默认)
394
410
  }
395
411
  ```
396
412
 
413
+ - `functionsDir`:云函数目录(`dev` / `serve` / `deploy` 读取,缺省 `functions/`)。
414
+ - `functions_prefix`:**仅影响本地调试路由**(见上方 `adep init` 产物结构说明)——
415
+ 配置后 `adep dev` 访问路径变为 `/{prefix}/{fnName}`、`adep serve` 变为 `/api/{prefix}/{fnName}`;
416
+ 函数互调与线上部署路径不随前缀变化。
417
+
397
418
  ---
398
419
 
399
420
  ## 常用示例
package/dist/index.js CHANGED
@@ -2744,6 +2744,7 @@ var dev_exports = {};
2744
2744
  __export(dev_exports, {
2745
2745
  loadConfig: () => loadConfig,
2746
2746
  parseEnvFile: () => parseEnvFile,
2747
+ resolveRouteFnName: () => resolveRouteFnName,
2747
2748
  startDevServer: () => startDevServer
2748
2749
  });
2749
2750
  import { createServer } from "node:http";
@@ -2756,18 +2757,19 @@ async function loadConfig(cwd) {
2756
2757
  try {
2757
2758
  await stat4(configPath);
2758
2759
  } catch {
2759
- return { name, functionsDir: "functions" };
2760
+ return { name, functionsDir: "functions", functionsPrefix: "" };
2760
2761
  }
2761
2762
  const bun = globalThis.Bun;
2762
- if (bun === void 0) return { name, functionsDir: "functions" };
2763
+ if (bun === void 0) return { name, functionsDir: "functions", functionsPrefix: "" };
2763
2764
  try {
2764
2765
  const mod = await import(configPath);
2765
2766
  return {
2766
2767
  name: mod.default?.name ?? name,
2767
- functionsDir: mod.default?.functionsDir ?? "functions"
2768
+ functionsDir: mod.default?.functionsDir ?? "functions",
2769
+ functionsPrefix: mod.default?.functions_prefix ?? ""
2768
2770
  };
2769
2771
  } catch {
2770
- return { name, functionsDir: "functions" };
2772
+ return { name, functionsDir: "functions", functionsPrefix: "" };
2771
2773
  }
2772
2774
  }
2773
2775
  function parseEnvFile(content) {
@@ -2824,6 +2826,32 @@ function bodyOf(req) {
2824
2826
  req.on("error", rejectBody);
2825
2827
  });
2826
2828
  }
2829
+ function resolveRouteFnName(pathname, prefix) {
2830
+ const segments = pathname.split("/").filter((segment) => segment.length > 0);
2831
+ const normalizedPrefix = prefix.replace(/^\/+|\/+$/g, "");
2832
+ if (normalizedPrefix.length === 0) {
2833
+ const first = segments[0];
2834
+ return first === void 0 ? {} : { fnName: first };
2835
+ }
2836
+ if (segments[0] !== normalizedPrefix) {
2837
+ return {
2838
+ error: {
2839
+ code: "FN_PREFIX_REQUIRED",
2840
+ message: `\u5DF2\u914D\u7F6E functions_prefix "${normalizedPrefix}"\uFF1A\u4EE5 /${normalizedPrefix}/{fnName} \u8C03\u7528\u672C\u5730\u51FD\u6570`
2841
+ }
2842
+ };
2843
+ }
2844
+ const second = segments[1];
2845
+ if (second === void 0) {
2846
+ return {
2847
+ error: {
2848
+ code: "FN_NAME_REQUIRED",
2849
+ message: `\u4EE5 /${normalizedPrefix}/{fnName} \u8C03\u7528\u672C\u5730\u51FD\u6570`
2850
+ }
2851
+ };
2852
+ }
2853
+ return { fnName: second };
2854
+ }
2827
2855
  function writeJson(res, status, payload) {
2828
2856
  res.writeHead(status, { "content-type": "application/json" });
2829
2857
  res.end(JSON.stringify(payload));
@@ -2920,7 +2948,11 @@ async function startDevServer(options) {
2920
2948
  };
2921
2949
  const handle = async (req, res) => {
2922
2950
  const url = new URL(req.url ?? "/", "http://127.0.0.1");
2923
- const fnName = url.pathname.split("/").find((segment) => segment.length > 0);
2951
+ const { fnName, error: routeError } = resolveRouteFnName(url.pathname, config.functionsPrefix);
2952
+ if (routeError !== void 0) {
2953
+ writeJson(res, 400, { error: routeError });
2954
+ return;
2955
+ }
2924
2956
  if (fnName === void 0) {
2925
2957
  writeJson(res, 400, {
2926
2958
  error: { code: "FN_NAME_REQUIRED", message: "\u4EE5 /{fnName} \u8C03\u7528\u672C\u5730\u51FD\u6570" }
@@ -3023,9 +3055,8 @@ function renderBanner(options) {
3023
3055
  lines.push("");
3024
3056
  lines.push(" \u80FD\u529B:");
3025
3057
  if (functions.length > 0) {
3026
- lines.push(
3027
- ` - \u51FD\u6570\u8DEF\u7531: ${baseUrl}/api/{fn}\uFF08${functions.length} \u4E2A\u51FD\u6570: ${functions.join(", ")}\uFF09`
3028
- );
3058
+ const route = options.functionsPrefix === void 0 || options.functionsPrefix.length === 0 ? `${baseUrl}/api/{fn}` : `${baseUrl}/api/${options.functionsPrefix.replace(/^\/+|\/+$/g, "")}/{fn}`;
3059
+ lines.push(` - \u51FD\u6570\u8DEF\u7531: ${route}\uFF08${functions.length} \u4E2A\u51FD\u6570: ${functions.join(", ")}\uFF09`);
3029
3060
  } else {
3030
3061
  lines.push(" - \u51FD\u6570\u8DEF\u7531: \u65E0\uFF08functions/ \u76EE\u5F55\u4E3A\u7A7A\uFF09");
3031
3062
  }
@@ -3273,7 +3304,12 @@ async function startServeServer(options) {
3273
3304
  const url = new URL(req.url ?? "/", `http://${host}:${port}`);
3274
3305
  const pathname = url.pathname;
3275
3306
  if (pathname === "/api" || pathname.startsWith("/api/")) {
3276
- const fnName = pathname === "/api" ? "" : pathname.slice("/api/".length).split("/")[0];
3307
+ const rest = pathname === "/api" ? "" : pathname.slice("/api/".length);
3308
+ const { fnName, error: routeError } = resolveRouteFnName(rest, config.functionsPrefix);
3309
+ if (routeError !== void 0) {
3310
+ writeJson2(res, 400, { error: routeError });
3311
+ return;
3312
+ }
3277
3313
  if (fnName === void 0 || fnName.length === 0) {
3278
3314
  writeJson2(res, 400, {
3279
3315
  error: { code: "FN_NAME_REQUIRED", message: "\u4EE5 /api/{fnName} \u8C03\u7528\u51FD\u6570" }
@@ -3368,6 +3404,7 @@ async function startServeServer(options) {
3368
3404
  port: actualPort,
3369
3405
  projectName: config.name,
3370
3406
  functions: functionNames,
3407
+ functionsPrefix: config.functionsPrefix,
3371
3408
  hasStatic,
3372
3409
  staticDir: relative(cwd, staticDir).length > 0 ? relative(cwd, staticDir) : staticDir
3373
3410
  });
@@ -5011,13 +5048,14 @@ ${detail}`);
5011
5048
  // packages/cli/src/cli.ts
5012
5049
  init_config();
5013
5050
  import { Command } from "commander";
5014
- import { createRequire } from "node:module";
5051
+ import { createRequire as createRequire2 } from "node:module";
5015
5052
 
5016
5053
  // packages/cli/src/output.ts
5017
5054
  init_auth();
5018
5055
 
5019
5056
  // packages/cli/src/init.ts
5020
5057
  import { mkdir as mkdir2, stat as stat2, writeFile } from "node:fs/promises";
5058
+ import { createRequire } from "node:module";
5021
5059
  import { dirname as dirname2, join, resolve } from "node:path";
5022
5060
 
5023
5061
  // shared/sdk/adep-env.ts
@@ -5408,31 +5446,80 @@ var InitError = class extends Error {
5408
5446
  this.name = "InitError";
5409
5447
  }
5410
5448
  };
5411
- var ADEP_CONFIG = (name, template) => `// adep \u9879\u76EE\u914D\u7F6E\uFF1ACLI\uFF08dev / deploy\uFF09\u6309 default export \u8BFB\u53D6\uFF08name / functionsDir\uFF09\u3002
5449
+ var requireJson = createRequire(import.meta.url);
5450
+ var CLI_VERSION = requireJson("../package.json").version;
5451
+ var ADEP_CONFIG = (name, template) => `// adep \u9879\u76EE\u914D\u7F6E\uFF1ACLI\uFF08dev / serve / deploy\uFF09\u6309 default export \u8BFB\u53D6\u3002
5452
+ // - name\uFF1A\u9879\u76EE\u6807\u8BC6\uFF08deploy / db \u7B49\u547D\u4EE4\u7684\u7F3A\u7701 project slug\uFF09
5453
+ // - template\uFF1A\u811A\u624B\u67B6\u6A21\u677F\uFF08empty / function / fullstack\uFF0Cinit \u65F6\u786E\u5B9A\uFF09
5454
+ // - functionsDir\uFF1A\u4E91\u51FD\u6570\u76EE\u5F55\uFF08dev / serve / deploy \u8BFB\u53D6\uFF0C\u7F3A\u7701 functions/\uFF09
5455
+ // - functions_prefix\uFF1A\u672C\u5730\u8C03\u8BD5\u8DEF\u7531\u524D\u7F00\u3002\u914D\u7F6E\u540E dev \u8BBF\u95EE\u8DEF\u5F84\u4E3A /{prefix}/{fnName}\u3001
5456
+ // serve \u4E3A /api/{prefix}/{fnName}\uFF1B\u7559\u7A7A\u5219\u4FDD\u6301 /{fnName} \u4E0E /api/{fnName}\u3002
5457
+ // \u8FB9\u754C\uFF1A\u53EA\u5F71\u54CD\u672C\u5730 HTTP \u5165\u53E3\u8DEF\u7531\uFF1B\u51FD\u6570\u4E92\u8C03\uFF08ctx.cloud.invoke\uFF09\u4E0E\u7EBF\u4E0A\u90E8\u7F72\u8DEF\u5F84\u6309\u51FD\u6570\u540D\uFF0C\u4E0D\u53D7\u5F71\u54CD\u3002
5412
5458
  export default {
5413
5459
  name: '${name}',
5414
5460
  template: '${template}',
5461
+ functionsDir: 'functions',
5462
+ functions_prefix: '',
5415
5463
  }
5416
5464
  `;
5465
+ var PACKAGE_JSON = (name, template) => {
5466
+ const pkg = {
5467
+ name,
5468
+ version: "0.1.0",
5469
+ private: true,
5470
+ type: "module",
5471
+ description: `AgentDeploy \u5168\u6808\u9879\u76EE\uFF08\u6A21\u677F\uFF1A${template}\uFF09\u2014\u2014functions/ \u4E91\u51FD\u6570 + web/ \u524D\u7AEF\u5DE5\u7A0B + database/ \u6570\u636E\u5E93`,
5472
+ scripts: {
5473
+ dev: "adep dev",
5474
+ serve: "adep serve",
5475
+ deploy: "adep deploy",
5476
+ "web:dev": "cd web && npm install && npm run dev",
5477
+ "web:build": "cd web && npm install && npm run build",
5478
+ doctor: "adep doctor"
5479
+ },
5480
+ dependencies: {
5481
+ "@adep/cli": CLI_VERSION
5482
+ },
5483
+ engines: {
5484
+ node: ">=18",
5485
+ bun: ">=1.0"
5486
+ }
5487
+ };
5488
+ return `${JSON.stringify(pkg, null, 2)}
5489
+ `;
5490
+ };
5417
5491
  var README = (name, template) => `# ${name}
5418
5492
 
5419
5493
  AgentDeploy \u5168\u6808\u9879\u76EE\uFF08\u6A21\u677F\uFF1A${template}\uFF09\u3002
5420
5494
 
5421
5495
  ## \u5E38\u7528\u547D\u4EE4
5422
5496
 
5423
- - \`adep dev\`\uFF1A\u672C\u5730\u8C03\u8BD5\uFF08\u76D1\u542C functions/\uFF0C\u652F\u6301\u70ED\u91CD\u8F7D\uFF0C\u9ED8\u8BA4 http://127.0.0.1:8787/<fnName>\uFF09
5424
- - \`adep deploy\`\uFF1A\u589E\u91CF\u90E8\u7F72\uFF08\u5BF9\u6BD4\u8FDC\u7AEF\u54C8\u5E0C \u2192 \u4EC5\u4E0A\u4F20\u53D8\u66F4 \u2192 \u53D1\u5E03 \u2192 \u8F93\u51FA\u8BBF\u95EE\u57DF\u540D\uFF09
5425
- - \`adep serve\`\uFF1A\u5F00\u53D1\u6001\u670D\u52A1\u5668\uFF08\u51FD\u6570 /api/{fn} + /healthz + \u9759\u6001\u6258\u7BA1 + \u524D\u7AEF\u9884\u89C8\uFF09
5497
+ - \`pnpm dev\`\uFF08= \`adep dev\`\uFF09\uFF1A\u672C\u5730\u8C03\u8BD5\uFF08\u76D1\u542C functions/\uFF0C\u652F\u6301\u70ED\u91CD\u8F7D\uFF0C\u9ED8\u8BA4 http://127.0.0.1:8787/<fnName>\uFF09
5498
+ - \`pnpm serve\`\uFF08= \`adep serve\`\uFF09\uFF1A\u5F00\u53D1\u6001\u670D\u52A1\u5668\uFF08\u51FD\u6570 /api/{fn} + /healthz + \u9759\u6001\u6258\u7BA1 + \u524D\u7AEF\u9884\u89C8\uFF09
5499
+ - \`pnpm deploy\`\uFF08= \`adep deploy\`\uFF09\uFF1A\u589E\u91CF\u90E8\u7F72\uFF08\u5BF9\u6BD4\u8FDC\u7AEF\u54C8\u5E0C \u2192 \u4EC5\u4E0A\u4F20\u53D8\u66F4 \u2192 \u53D1\u5E03 \u2192 \u8F93\u51FA\u8BBF\u95EE\u57DF\u540D\uFF09
5500
+ - \`pnpm web:dev\`\uFF1A\u524D\u7AEF\u5DE5\u7A0B\u672C\u5730\u5F00\u53D1\uFF08cd web && vite\uFF09
5501
+ - \`pnpm web:build\`\uFF1A\u524D\u7AEF\u5DE5\u7A0B\u6784\u5EFA
5502
+ - \`pnpm doctor\`\uFF08= \`adep doctor\`\uFF09\uFF1A\u672C\u5730\u73AF\u5883\u79BB\u7EBF\u8BCA\u65AD
5426
5503
 
5427
5504
  ## \u76EE\u5F55\u7ED3\u6784
5428
5505
 
5429
- - \`adep.config.ts\`\uFF1A\u9879\u76EE\u6807\u8BC6\uFF08dev / deploy \u6309\u6B64\u8BC6\u522B\uFF09
5506
+ - \`package.json\`\uFF1A\u5E94\u7528\u5B9A\u4E49\uFF08\u58F0\u660E @adep/cli \u7248\u672C\u4F9D\u8D56\u4E0E\u5E38\u7528 scripts\uFF1B\u4E0E\u5BFC\u51FA\u7684\u79BB\u7EBF\u90E8\u7F72\u5305\u540C\u6784\uFF09
5507
+ - \`adep.config.ts\`\uFF1A\u9879\u76EE\u914D\u7F6E\uFF08name / template / functionsDir / functions_prefix\uFF09
5430
5508
  - \`functions/\`\uFF1A\u4E91\u51FD\u6570\u76EE\u5F55\uFF08\u6BCF\u4E2A\u6587\u4EF6 = \u4E00\u4E2A\u51FD\u6570\uFF0C\u9ED8\u8BA4\u5BFC\u51FA \`(ctx: AdepContext) => Response\`\uFF09
5431
5509
  - \`web/\`\uFF1A\u524D\u7AEF\u5DE5\u7A0B\uFF08\u6807\u51C6 Vite + Vue 3\uFF1B\u4E0E Web IDE \u9879\u76EE\u540C\u6784\uFF0C\u53EF\u6574\u76EE\u5F55\u5BFC\u51FA\u4E8C\u6B21\u5F00\u53D1\uFF09
5432
5510
  - \`database/schema.sql\`\uFF1A\u6570\u636E\u5E93\u7ED3\u6784\uFF08\u8868\u7531\u5E73\u53F0\u63A7\u5236\u53F0 / \`adep db\` \u7BA1\u7406\uFF0C\u6B64\u5904\u4E3A\u7ED3\u6784\u8BB0\u5F55\uFF09
5433
5511
  - \`tsconfig.json\`\uFF1A\u4E91\u51FD\u6570 TypeScript \u7F16\u8F91\u5668\u914D\u7F6E\uFF08strict + noEmit\uFF09
5434
5512
  - \`adep.d.ts\`\uFF1A\u4E91\u51FD\u6570\u4E0A\u4E0B\u6587\u73AF\u5883\u7C7B\u578B\u58F0\u660E\uFF08\`ctx: AdepContext\` \u8865\u5168\uFF0C\u65E0\u9700\u88C5\u4F9D\u8D56\uFF09
5435
5513
 
5514
+ ## \u672C\u5730\u51FD\u6570\u8DEF\u7531\u524D\u7F00\uFF08functions_prefix\uFF09
5515
+
5516
+ \`adep.config.ts\` \u7684 \`functions_prefix\` \u63A7\u5236\u672C\u5730\u8C03\u8BD5\u8DEF\u7531\u524D\u7F00\uFF08\u9ED8\u8BA4\u7A7A\uFF09\uFF1A
5517
+ - \u914D\u7F6E \`functions_prefix: 'api'\` \u540E\uFF1A\`adep dev\` \u8BBF\u95EE \`/{fnName}\` \u2192 \`/api/{fnName}\`\uFF1B
5518
+ \`adep serve\` \u8BBF\u95EE \`/api/{fnName}\` \u2192 \`/api/api/{fnName}\`\uFF08\u524D\u7F00\u62FC\u63A5\uFF09\u3002
5519
+ - \u7559\u7A7A\uFF1A\`adep dev\` \u4E3A \`/{fnName}\`\uFF0C\`adep serve\` \u4E3A \`/api/{fnName}\`\u3002
5520
+ - **\u8FB9\u754C**\uFF1A\u53EA\u5F71\u54CD\u672C\u5730 HTTP \u5165\u53E3\uFF1B\u51FD\u6570\u4E92\u8C03 \`ctx.cloud.invoke('name')\` \u4E0E\u7EBF\u4E0A\u90E8\u7F72\u8DEF\u5F84\u6309\u51FD\u6570\u540D\uFF0C
5521
+ \u4E0D\u968F\u524D\u7F00\u53D8\u5316\uFF08\u4E0E\u7EBF\u4E0A\u540C\u6784\uFF09\u3002
5522
+
5436
5523
  ## \u4E91\u51FD\u6570\u7C7B\u578B\u63D0\u793A
5437
5524
 
5438
5525
  \u7528 VSCode \u6253\u5F00\u672C\u76EE\u5F55\uFF0C\u4EFB\u610F \`functions/**\` \u4E0B\u7684 TS \u6587\u4EF6\u5373\u53EF\u83B7\u5F97 \`AdepContext\` / \`ctx.cloud.*\` \u8865\u5168\uFF1A
@@ -5493,6 +5580,8 @@ async function initProject(cwd, name, template) {
5493
5580
  throw new InitError("DIR_EXISTS", `\u76EE\u5F55 ${projectPath} \u5DF2\u5B58\u5728\uFF1A\u8BF7\u6362\u4E00\u4E2A\u540D\u5B57\u6216\u5148\u5220\u9664`);
5494
5581
  }
5495
5582
  const files = [
5583
+ // 根 package.json:应用定义(声明 @adep/cli 版本依赖与 scripts;与导出的离线部署包同构)。
5584
+ { path: "package.json", content: PACKAGE_JSON(name, template) },
5496
5585
  { path: "adep.config.ts", content: ADEP_CONFIG(name, template) },
5497
5586
  // 云函数 TypeScript 类型提示:tsconfig 把 adep.d.ts 纳入 include,写 ctx: AdepContext 即有补全。
5498
5587
  { path: "tsconfig.json", content: ADEP_TSCONFIG_JSON },
@@ -6282,8 +6371,8 @@ function registerExport(program2, ctx) {
6282
6371
  }
6283
6372
 
6284
6373
  // packages/cli/src/cli.ts
6285
- var requireJson = createRequire(import.meta.url);
6286
- var APP_VERSION = requireJson("../package.json").version;
6374
+ var requireJson2 = createRequire2(import.meta.url);
6375
+ var APP_VERSION = requireJson2("../package.json").version;
6287
6376
  function buildProgram(options = {}) {
6288
6377
  const output = options.output ?? ((line) => process.stdout.write(`${line}
6289
6378
  `));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adep/cli",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "type": "module",
5
5
  "description": "`adep` 命令行工具包位:登录 / 初始化 / 本地调试 / 部署 / 数据库维护 / 云存储 / 静态托管 / 微前端组件(widget),实现见任务单 CLI-001 ~ CLI-003 与 FE-002",
6
6
  "bin": {