@adep/cli 0.0.7 → 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.
- package/README.md +30 -9
- package/dist/index.js +106 -17
- 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
|
-
├──
|
|
137
|
-
├──
|
|
138
|
-
├──
|
|
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
|
|
141
|
+
│ ├── hello.ts # 示例函数(deploy 后经 /hello 触发)
|
|
141
142
|
│ └── README.md
|
|
142
|
-
├── web/
|
|
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
|
|
149
|
+
│ └── schema.sql # 数据库结构(占位;表由平台控制台 / adep db 管理)
|
|
149
150
|
├── README.md
|
|
150
|
-
└── .gitignore
|
|
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`
|
|
401
|
+
`adep init` 生成的项目配置文件,CLI 的 `dev` / `serve` / `deploy` 按此识别项目(CLI 直接 import 后读 `default` 的字段,无需任何辅助包):
|
|
388
402
|
|
|
389
403
|
```ts
|
|
390
|
-
// adep 项目配置:CLI(dev / deploy)按 default export
|
|
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
|
|
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
|
-
|
|
3027
|
-
|
|
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
|
|
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
|
|
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
|
|
5425
|
-
- \`adep
|
|
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
|
-
- \`
|
|
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
|
|
6286
|
-
var APP_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
|
`));
|