@lark-apaas/fullstack-cli 1.1.37-alpha.0 → 1.1.37-alpha.2
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 +1 -1
- package/templates/scripts/build.sh +85 -87
package/package.json
CHANGED
|
@@ -19,105 +19,116 @@ print_time() {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
# ==================== 步骤 0 ====================
|
|
22
|
-
echo "🗑️ [0/
|
|
22
|
+
echo "🗑️ [0/7] 安装插件"
|
|
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/
|
|
29
|
+
echo "📝 [1/7] 更新 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/
|
|
36
|
+
echo "🗑️ [2/7] 清理 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] 生成路由定义"
|
|
43
44
|
STEP_START=$(node -e "console.log(Date.now())")
|
|
44
45
|
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
|
|
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=$!
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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=$!
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
cat /tmp/build-client.log
|
|
56
|
-
exit 1
|
|
57
|
-
fi
|
|
56
|
+
API_ROUTES_EXIT=0
|
|
57
|
+
PAGE_ROUTES_EXIT=0
|
|
58
58
|
|
|
59
|
-
|
|
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
|
|
60
65
|
else
|
|
61
|
-
echo "
|
|
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 构建完成"
|
|
66
|
+
echo " ✅ API 路由生成完成"
|
|
94
67
|
fi
|
|
95
68
|
|
|
69
|
+
if [ $PAGE_ROUTES_EXIT -ne 0 ]; then
|
|
70
|
+
echo " ⚠️ 页面路由生成失败(不影响构建)"
|
|
71
|
+
cat /tmp/gen-page-routes.log
|
|
72
|
+
else
|
|
73
|
+
echo " ✅ 页面路由生成完成"
|
|
74
|
+
fi
|
|
96
75
|
print_time $STEP_START
|
|
97
76
|
echo ""
|
|
98
77
|
|
|
99
78
|
# ==================== 步骤 4 ====================
|
|
100
|
-
echo "
|
|
79
|
+
echo "🔨 [4/7] 并行构建 server 和 client"
|
|
101
80
|
STEP_START=$(node -e "console.log(Date.now())")
|
|
102
81
|
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
108
103
|
fi
|
|
109
104
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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] 准备产物"
|
|
118
|
+
STEP_START=$(node -e "console.log(Date.now())")
|
|
119
|
+
|
|
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
|
|
116
127
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
# 移动 client 下的 HTML 文件到 dist/dist/client,保证 views 路径在 dev/prod 下一致
|
|
129
|
+
if [ -d "$DIST_DIR/client" ]; then
|
|
130
|
+
mkdir -p "$DIST_DIR/dist/client"
|
|
131
|
+
find "$DIST_DIR/client" -maxdepth 1 -name "*.html" -exec mv {} "$DIST_DIR/dist/client/" \;
|
|
121
132
|
fi
|
|
122
133
|
|
|
123
134
|
# 清理无用文件
|
|
@@ -127,18 +138,12 @@ rm -rf "$DIST_DIR/tsconfig.node.tsbuildinfo"
|
|
|
127
138
|
print_time $STEP_START
|
|
128
139
|
echo ""
|
|
129
140
|
|
|
130
|
-
# ==================== 步骤
|
|
141
|
+
# ==================== 步骤 6 ====================
|
|
142
|
+
echo "✂️ [6/7] 智能依赖裁剪"
|
|
131
143
|
STEP_START=$(node -e "console.log(Date.now())")
|
|
132
144
|
|
|
133
|
-
#
|
|
134
|
-
|
|
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
|
|
145
|
+
# 分析实际依赖、复制并裁剪 node_modules、生成精简的 package.json
|
|
146
|
+
node "$ROOT_DIR/scripts/prune-smart.js"
|
|
142
147
|
|
|
143
148
|
print_time $STEP_START
|
|
144
149
|
echo ""
|
|
@@ -149,16 +154,9 @@ print_time $TOTAL_START
|
|
|
149
154
|
|
|
150
155
|
# 输出产物信息
|
|
151
156
|
DIST_SIZE=$(du -sh "$DIST_DIR" | cut -f1)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
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 ""
|