@lark-apaas/coding-template-nestjs-react-fullstack 0.1.0-alpha.2 → 0.1.0-alpha.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/coding-template-nestjs-react-fullstack",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.4",
4
4
  "description": "NestJS + React fullstack template for miaoda coding",
5
5
  "type": "module",
6
6
  "files": [
@@ -26,7 +26,7 @@
26
26
  "license": "MIT",
27
27
  "miaodaTemplate": {
28
28
  "schemaVersion": 1,
29
- "archType": 3,
29
+ "archType": 1,
30
30
  "hooks": {
31
31
  "beforeRender": "hooks/before-render.mjs",
32
32
  "afterRender": "hooks/after-render.mjs",
package/template/.env ADDED
@@ -0,0 +1,14 @@
1
+ # Application
2
+ # Server Configuration (NestJS)
3
+ SUDA_DATABASE_URL=
4
+
5
+ # Client Configuration
6
+
7
+ # Logger
8
+ LOG_DIR=./logs
9
+ LOG_REQUEST_BODY=true
10
+ LOG_RESPONSE_BODY=true
11
+
12
+ # Framework build / lint mode(false = 严格)
13
+ FORCE_FRAMEWORK_BUILD_LOOSE_MODE=false
14
+ FORCE_FRAMEWORK_LINT_LOOSE_MODE=false
@@ -0,0 +1 @@
1
+ {"stack":"nestjs-react-fullstack"}
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # 本地 dev 启动脚本(平台控制,通过 `miaoda app upgrade` 同步,请勿手改)
4
+ # Stack: nestjs-react-fullstack
5
+ # 流程:env pull → skills sync → 并发起 server + client
6
+ # ============================================================================
7
+ set -euo pipefail
8
+ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
9
+ cd "$ROOT_DIR"
10
+
11
+ # === Sentinels(必须由本脚本注入,不属于 .env.local 业务范畴)===
12
+
13
+ # Stack 对应 miaoda CLI 的 application scene;沙箱里平台注入,本地脚本兜底,
14
+ # 让后续 miaoda 子命令(skills sync 等)走对的 scene。
15
+ export MIAODA_APP_TYPE="${MIAODA_APP_TYPE:-3}"
16
+
17
+ # 本地开发总开关:SDK(fullstack-vite-preset / fullstack-rspack-preset /
18
+ # fullstack-nestjs-core)据此启用本地兜底逻辑:
19
+ # - vite/rspack-preset:反代 /__runtime__ 到沙箱(带 cookie / webuser header)
20
+ # - nestjs-core:从 cookie 补 csrf header + 注入 webuser header
21
+ # 沙箱 dev / 生产不设此 env,SDK 行为完全不变。
22
+ export MIAODA_LOCAL_DEV=1
23
+
24
+ # 临时:绕 npmmirror/bnpm 内网到 npmjs 的同步延迟,等 coding-steering 正式版去掉。
25
+ export MIAODA_NPM_REGISTRY="${MIAODA_NPM_REGISTRY:-https://registry.npmjs.org/}"
26
+
27
+ # === .env.local / .env 加载由 SDK 侧负责,本脚本不再手工 source ===
28
+ # fullstack-nestjs-core 在 module init 通过 dotenv 读 .env.local + .env;
29
+ # fullstack-{vite,rspack}-preset 的 defineConfig 同理。优先级:shell > .env.local > .env。
30
+ # 历史版本曾在这里用 bash 自写 parser,引号 / 多行 / 行尾注释处理不全且重复造轮子,已下放到 SDK。
31
+
32
+ # 1. 拉本地 dev 所需 ENV(jwt / cookie / sandbox URL 等,写入 .env.local)
33
+ # app_id 从 .spark/meta.json 读 —— `miaoda app init --app-id <id>` 时持久化的权威源,
34
+ # 后续 dev / sync 全部沿用这一个值;不在脚本里 hack 别的推断渠道。
35
+ # lark-cli 子命令真名是 `+env-pull`(带 + 前缀单 token,不是 `env pull` 空格分隔);
36
+ # `--as user` 必须显式:env-pull 只接受 user identity,默认 bot 会校验失败。
37
+ echo "[dev-local] (1/3) env pull..."
38
+ if command -v lark-cli >/dev/null 2>&1; then
39
+ # 用 node 读 .spark/meta.json,不引 python3 依赖(user app 必装 node)。
40
+ APP_ID=$(node -e 'try{process.stdout.write(JSON.parse(require("fs").readFileSync(".spark/meta.json","utf8")).app_id||"")}catch(e){}' 2>/dev/null || echo "")
41
+ if [ -n "$APP_ID" ]; then
42
+ lark-cli apps +env-pull --app-id "$APP_ID" --as user || echo " (env pull 失败,后续按 .env.local 现状继续)"
43
+ else
44
+ echo " (.spark/meta.json 缺 app_id,先跑 \`miaoda app init --app-id <id>\` 写入)"
45
+ fi
46
+ else
47
+ echo " (lark-cli 未装,跳过 env pull;请确保 .env.local 已就绪)"
48
+ fi
49
+
50
+ # 2. 同步 stack 对应 skills(coding-steering)。走 npx 不依赖用户全局装 miaoda;
51
+ # 钉到 @alpha dist-tag 跟随最新发布,miaoda-cli 通道我们自己控制风险小。
52
+ echo "[dev-local] (2/3) miaoda skills sync..."
53
+ npx -y @lark-apaas/miaoda-cli@alpha skills sync || echo " (skills sync 失败,继续启动)"
54
+
55
+ # 3. 并发起 dev:server(NestJS)+ dev:client(vite/rspack)
56
+ # 端口、SANDBOX_* 等业务 env 由 SDK 内 dotenv 加载,不在 banner 里假装显示。
57
+ # 不走 scripts/dev.js(保活 / restart / 日志写文件那套)—— 本地崩就崩,错日志直接 stdout。
58
+ echo "[dev-local] (3/3) 并发起 dev:server + dev:client"
59
+ exec npx --no-install concurrently \
60
+ --names "server,client" --prefix-colors "blue,green" --kill-others-on-fail \
61
+ "npm run dev:server" "npm run dev:client"
@@ -9,7 +9,8 @@
9
9
  }
10
10
  },
11
11
  "watchOptions": {
12
- "excludeDirectories": ["node_modules/**"]
12
+ "excludeDirectories": ["node_modules/**"],
13
+ "preserveWatchOutput": true
13
14
  },
14
15
  "include": ["server/**/*", "shared/**/*.ts"],
15
16
  "exclude": ["node_modules", "dist", "client", "**/*.spec.ts", "**/*.e2e-spec.ts"],
@@ -1,38 +0,0 @@
1
- # =================================================
2
- # 妙搭本地开发 — .env.local
3
- # 优先级:shell env > .env.local > .env
4
- # SDK(fullstack-vite-preset / fullstack-nestjs-core)在 module init 通过 dotenv 自动加载
5
- # =================================================
6
-
7
- # ───── 应用上下文 ─────
8
- # app_id=app_xxx
9
- # CLIENT_BASE_PATH=/app/app_xxx/ # React Router basename + Vite base
10
- # FORCE_FRAMEWORK_DOMAIN_MAIN=https://miaoda.feishu-boe.cn
11
- # FORCE_FRAMEWORK_ENVIRONMENT=boe
12
-
13
- # ───── 端口(缺省即使用 SDK 默认 8080 / 3000,本地推荐 8001 / 3000)─────
14
- # CLIENT_DEV_PORT=8001
15
- # SERVER_PORT=3000
16
- # SERVER_HOST=localhost
17
- # CLIENT_DEV_HOST=0.0.0.0
18
-
19
- # ───── 业务 DB(BOE PG 公网 endpoint,本地可直连)─────
20
- # SUDA_DATABASE_URL=postgresql://<user>:<pass>@<host>.miaoda-pg-staging.aiforce.cloud:5432/<db>?sslmode=require&schema=workspace_<id>
21
-
22
- # ───── 沙箱反代(本地 dev 兜底;MIAODA_LOCAL_DEV=1 由 scripts/dev-local.sh 自动 export)─────
23
- # SANDBOX_PUBLIC_URL=https://ai-tenant-<app_id>-<sandbox_id>.aiforce-boe-preview.bytedance.net
24
-
25
- # 后端下发的单值 session id(新流,推荐)
26
- # FORCE_AUTHN_PREVIEW_SESSION_ID=<后端给的 session 值>
27
-
28
- # webuser 身份(JSON,必须单行无空格)
29
- # SUDA_WEBUSER={"user_id":"...","tenant_id":...,"app_id":"app_xxx","env":"preview","login_url":"","roles":null,"user_type":"_employee","user_name":{"zh_cn":"..."}}
30
-
31
- # ───── 日志 ─────
32
- LOG_DIR=./logs
33
- LOG_REQUEST_BODY=true
34
- LOG_RESPONSE_BODY=true
35
-
36
- # ───── 构建期 ─────
37
- FORCE_FRAMEWORK_BUILD_LOOSE_MODE=false
38
- FORCE_FRAMEWORK_LINT_LOOSE_MODE=false