@lark-apaas/fullstack-cli 1.1.36-alpha.2 → 1.1.37-alpha.0

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/fullstack-cli",
3
- "version": "1.1.36-alpha.2",
3
+ "version": "1.1.37-alpha.0",
4
4
  "description": "CLI tool for fullstack template management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,116 +19,105 @@ print_time() {
19
19
  }
20
20
 
21
21
  # ==================== 步骤 0 ====================
22
- echo "🗑️ [0/7] 安装插件"
22
+ echo "🗑️ [0/5] 安装插件"
23
23
  STEP_START=$(node -e "console.log(Date.now())")
24
24
  npx fullstack-cli action-plugin init
25
25
  print_time $STEP_START
26
26
  echo ""
27
27
 
28
28
  # ==================== 步骤 1 ====================
29
- echo "📝 [1/7] 更新 openapi 代码"
29
+ echo "📝 [1/5] 更新 openapi 代码"
30
30
  STEP_START=$(node -e "console.log(Date.now())")
31
31
  npm run gen:openapi
32
32
  print_time $STEP_START
33
33
  echo ""
34
34
 
35
35
  # ==================== 步骤 2 ====================
36
- echo "🗑️ [2/7] 清理 dist 目录"
36
+ echo "🗑️ [2/5] 清理 dist 目录"
37
37
  STEP_START=$(node -e "console.log(Date.now())")
38
38
  rm -rf "$ROOT_DIR/dist"
39
39
  print_time $STEP_START
40
40
  echo ""
41
41
 
42
42
  # ==================== 步骤 3 ====================
43
- echo "🗺️ [3/7] 生成路由定义"
44
43
  STEP_START=$(node -e "console.log(Date.now())")
45
44
 
46
- # client/server 构建之前生成到 dist/,供 DefinePlugin 注入前端 bundle
47
- # 注意:nest-cli.json 中 deleteOutDir 必须为 false(模板默认值),否则 nest build 会清掉 dist/
48
- echo " ├─ 生成 API 路由定义..."
49
- npx generate-api-routes --server-dir ./server --out-dir ./dist > /tmp/gen-api-routes.log 2>&1 &
50
- API_ROUTES_PID=$!
45
+ # 根据 only_frontend_change 决定是否构建 server
46
+ if [[ "${only_frontend_change:-false}" == "true" ]]; then
47
+ echo "🔨 [3/5] 仅构建 client (only_frontend_change=true)"
51
48
 
52
- echo " ├─ 生成页面路由定义..."
53
- npx generate-page-routes --app-path ./client/src/app.tsx --out-dir ./dist > /tmp/gen-page-routes.log 2>&1 &
54
- PAGE_ROUTES_PID=$!
49
+ echo " ├─ 启动 client 构建..."
50
+ npm run build:client > /tmp/build-client.log 2>&1
51
+ CLIENT_EXIT=$?
55
52
 
56
- API_ROUTES_EXIT=0
57
- PAGE_ROUTES_EXIT=0
53
+ if [ $CLIENT_EXIT -ne 0 ]; then
54
+ echo " ❌ Client 构建失败"
55
+ cat /tmp/build-client.log
56
+ exit 1
57
+ fi
58
58
 
59
- wait $API_ROUTES_PID || API_ROUTES_EXIT=$?
60
- wait $PAGE_ROUTES_PID || PAGE_ROUTES_EXIT=$?
61
-
62
- if [ $API_ROUTES_EXIT -ne 0 ]; then
63
- echo " ⚠️ API 路由生成失败(不影响构建)"
64
- cat /tmp/gen-api-routes.log
59
+ echo " ✅ Client 构建完成"
65
60
  else
66
- echo " API 路由生成完成"
61
+ echo "🔨 [3/5] 并行构建 server 和 client"
62
+
63
+ # 并行构建
64
+ echo " ├─ 启动 server 构建..."
65
+ npm run build:server > /tmp/build-server.log 2>&1 &
66
+ SERVER_PID=$!
67
+
68
+ echo " ├─ 启动 client 构建..."
69
+ npm run build:client > /tmp/build-client.log 2>&1 &
70
+ CLIENT_PID=$!
71
+
72
+ # 等待两个构建完成
73
+ SERVER_EXIT=0
74
+ CLIENT_EXIT=0
75
+
76
+ wait $SERVER_PID || SERVER_EXIT=$?
77
+ wait $CLIENT_PID || CLIENT_EXIT=$?
78
+
79
+ # 检查构建结果
80
+ if [ $SERVER_EXIT -ne 0 ]; then
81
+ echo " ❌ Server 构建失败"
82
+ cat /tmp/build-server.log
83
+ exit 1
84
+ fi
85
+
86
+ if [ $CLIENT_EXIT -ne 0 ]; then
87
+ echo " ❌ Client 构建失败"
88
+ cat /tmp/build-client.log
89
+ exit 1
90
+ fi
91
+
92
+ echo " ✅ Server 构建完成"
93
+ echo " ✅ Client 构建完成"
67
94
  fi
68
95
 
69
- if [ $PAGE_ROUTES_EXIT -ne 0 ]; then
70
- echo " ⚠️ 页面路由生成失败(不影响构建)"
71
- cat /tmp/gen-page-routes.log
72
- else
73
- echo " ✅ 页面路由生成完成"
74
- fi
75
96
  print_time $STEP_START
76
97
  echo ""
77
98
 
78
99
  # ==================== 步骤 4 ====================
79
- echo "🔨 [4/7] 并行构建 server 和 client"
80
- STEP_START=$(node -e "console.log(Date.now())")
81
-
82
- # 并行构建
83
- echo " ├─ 启动 server 构建..."
84
- npm run build:server > /tmp/build-server.log 2>&1 &
85
- SERVER_PID=$!
86
-
87
- echo " ├─ 启动 client 构建..."
88
- npm run build:client > /tmp/build-client.log 2>&1 &
89
- CLIENT_PID=$!
90
-
91
- # 等待两个构建完成
92
- SERVER_EXIT=0
93
- CLIENT_EXIT=0
94
-
95
- wait $SERVER_PID || SERVER_EXIT=$?
96
- wait $CLIENT_PID || CLIENT_EXIT=$?
97
-
98
- # 检查构建结果
99
- if [ $SERVER_EXIT -ne 0 ]; then
100
- echo " ❌ Server 构建失败"
101
- cat /tmp/build-server.log
102
- exit 1
103
- fi
104
-
105
- if [ $CLIENT_EXIT -ne 0 ]; then
106
- echo " ❌ Client 构建失败"
107
- cat /tmp/build-client.log
108
- exit 1
109
- fi
110
-
111
- echo " ✅ Server 构建完成"
112
- echo " ✅ Client 构建完成"
113
- print_time $STEP_START
114
- echo ""
115
-
116
- # ==================== 步骤 5 ====================
117
- echo "📦 [5/7] 准备产物"
100
+ echo "📦 [4/5] 准备产物"
118
101
  STEP_START=$(node -e "console.log(Date.now())")
119
102
 
120
- # 拷贝 run.sh 到 dist/(prod 从 dist/ 启动,确保 cwd 一致性)
121
- cp "$ROOT_DIR/scripts/run.sh" "$DIST_DIR/"
122
-
123
- # 拷贝 .env 文件(如果存在)
124
- if [ -f "$ROOT_DIR/.env" ]; then
125
- cp "$ROOT_DIR/.env" "$DIST_DIR/"
126
- fi
127
-
128
103
  # 移动 client 下的 HTML 文件到 dist/dist/client,保证 views 路径在 dev/prod 下一致
104
+ # HTML 文件属于前端产物,始终执行
129
105
  if [ -d "$DIST_DIR/client" ]; then
130
106
  mkdir -p "$DIST_DIR/dist/client"
131
- find "$DIST_DIR/client" -maxdepth 1 -name "*.html" -exec mv {} "$DIST_DIR/dist/client/" \;
107
+ find "$DIST_DIR/client" -maxdepth 1 -name "*.html" -exec cp {} "$DIST_DIR/dist/client/" \;
108
+ fi
109
+
110
+ # server 相关产物准备(only_frontend_change=true 时跳过)
111
+ if [[ "${only_frontend_change:-false}" == "true" ]]; then
112
+ echo " [skip] 跳过 run.sh/.env 复制 (only_frontend_change=true)"
113
+ else
114
+ # 拷贝 run.sh 到 dist/(prod 从 dist/ 启动,确保 cwd 一致性)
115
+ cp "$ROOT_DIR/scripts/run.sh" "$DIST_DIR/"
116
+
117
+ # 拷贝 .env 文件(如果存在)
118
+ if [ -f "$ROOT_DIR/.env" ]; then
119
+ cp "$ROOT_DIR/.env" "$DIST_DIR/"
120
+ fi
132
121
  fi
133
122
 
134
123
  # 清理无用文件
@@ -138,12 +127,18 @@ rm -rf "$DIST_DIR/tsconfig.node.tsbuildinfo"
138
127
  print_time $STEP_START
139
128
  echo ""
140
129
 
141
- # ==================== 步骤 6 ====================
142
- echo "✂️ [6/7] 智能依赖裁剪"
130
+ # ==================== 步骤 5 ====================
143
131
  STEP_START=$(node -e "console.log(Date.now())")
144
132
 
145
- # 分析实际依赖、复制并裁剪 node_modules、生成精简的 package.json
146
- node "$ROOT_DIR/scripts/prune-smart.js"
133
+ # 智能依赖裁剪(仅全量构建时执行,纯前端场景不打包 server,无需裁剪)
134
+ if [[ "${only_frontend_change:-false}" == "true" ]]; then
135
+ echo "✂️ [5/5] 跳过智能依赖裁剪 (only_frontend_change=true)"
136
+ else
137
+ echo "✂️ [5/5] 智能依赖裁剪"
138
+
139
+ # 分析实际依赖、复制并裁剪 node_modules、生成精简的 package.json
140
+ node "$ROOT_DIR/scripts/prune-smart.js"
141
+ fi
147
142
 
148
143
  print_time $STEP_START
149
144
  echo ""
@@ -154,9 +149,16 @@ print_time $TOTAL_START
154
149
 
155
150
  # 输出产物信息
156
151
  DIST_SIZE=$(du -sh "$DIST_DIR" | cut -f1)
157
- NODE_MODULES_SIZE=$(du -sh "$DIST_DIR/node_modules" | cut -f1)
158
- echo ""
159
- echo "📊 构建产物统计:"
160
- echo " 产物大小: $DIST_SIZE"
161
- echo " node_modules: $NODE_MODULES_SIZE"
162
- echo ""
152
+ if [[ "${only_frontend_change:-false}" == "true" ]]; then
153
+ echo ""
154
+ echo "📊 构建产物统计:"
155
+ echo " 产物大小: $DIST_SIZE"
156
+ echo ""
157
+ else
158
+ NODE_MODULES_SIZE=$(du -sh "$DIST_DIR/node_modules" | cut -f1)
159
+ echo ""
160
+ echo "📊 构建产物统计:"
161
+ echo " 产物大小: $DIST_SIZE"
162
+ echo " node_modules: $NODE_MODULES_SIZE"
163
+ echo ""
164
+ fi