@coze-arch/cli 0.1.8-alpha.7654a3 → 0.1.8-alpha.a5ed27
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 +0 -18
- package/lib/__templates__/expo/.cozeproj/scripts/prepare-node-modules.sh +10 -178
- package/lib/__templates__/nextjs/.coze +1 -1
- package/lib/__templates__/nextjs/README.md +0 -18
- package/lib/__templates__/nextjs/eslint.config.mjs +1 -1
- package/lib/__templates__/nextjs/next.config.ts +9 -0
- package/lib/__templates__/nextjs/scripts/build.ps1 +1 -1
- package/lib/__templates__/nextjs/scripts/build.sh +2 -2
- package/lib/__templates__/nextjs/scripts/dev.ps1 +2 -2
- package/lib/__templates__/nextjs/scripts/dev.sh +55 -16
- package/lib/__templates__/nextjs/scripts/prepare-node-modules.sh +212 -0
- package/lib/__templates__/nextjs/scripts/prepare.sh +2 -10
- package/lib/__templates__/nextjs/scripts/validate.sh +1 -11
- package/lib/__templates__/nextjs/src/server.ts +1 -1
- package/lib/__templates__/nextjs/template.config.js +6 -20
- package/lib/__templates__/nextjs/tsconfig.json +1 -0
- package/lib/__templates__/nuxt-vue/.coze +1 -1
- package/lib/__templates__/nuxt-vue/README.md +2 -20
- package/lib/__templates__/nuxt-vue/scripts/build.sh +1 -1
- package/lib/__templates__/nuxt-vue/scripts/dev.sh +4 -10
- package/lib/__templates__/nuxt-vue/scripts/prepare-node-modules.sh +212 -0
- package/lib/__templates__/nuxt-vue/scripts/prepare.sh +2 -10
- package/lib/__templates__/nuxt-vue/scripts/validate.sh +1 -11
- package/lib/__templates__/taro/.coze +2 -2
- package/lib/__templates__/taro/.cozeproj/scripts/build-on-local-disk.sh +194 -0
- package/lib/__templates__/taro/.cozeproj/scripts/deploy_build.sh +1 -9
- package/lib/__templates__/taro/.cozeproj/scripts/dev_build.sh +1 -10
- package/lib/__templates__/taro/.cozeproj/scripts/dev_run.sh +50 -51
- package/lib/__templates__/taro/.cozeproj/scripts/pack.sh +42 -13
- package/lib/__templates__/taro/.cozeproj/scripts/prepare-node-modules.sh +10 -178
- package/lib/__templates__/taro/.cozeproj/scripts/validate.sh +0 -3
- package/lib/__templates__/taro/package.json +5 -5
- package/lib/__templates__/vite/.coze +1 -1
- package/lib/__templates__/vite/README.md +0 -20
- package/lib/__templates__/vite/scripts/build.sh +1 -1
- package/lib/__templates__/vite/scripts/dev.sh +4 -10
- package/lib/__templates__/vite/scripts/prepare-node-modules.sh +212 -0
- package/lib/__templates__/vite/scripts/prepare.sh +2 -10
- package/lib/__templates__/vite/scripts/validate.sh +1 -7
- package/lib/__templates__/vite/template.config.js +6 -20
- package/lib/cli.js +184 -367
- package/package.json +1 -2
- package/lib/__templates__/nextjs/scripts/local-workspace.cjs +0 -302
- package/lib/__templates__/nuxt-vue/scripts/local-workspace.cjs +0 -302
- package/lib/__templates__/taro/.cozeproj/scripts/local-workspace.cjs +0 -351
- package/lib/__templates__/taro/.cozeproj/scripts/taro-build.cjs +0 -66
- package/lib/__templates__/vite/scripts/local-workspace.cjs +0 -302
|
@@ -8,7 +8,7 @@ build = ["bash", ".cozeproj/scripts/dev_build.sh"]
|
|
|
8
8
|
build_win = ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ".cozeproj/scripts/dev_build.ps1"]
|
|
9
9
|
run = ["bash", ".cozeproj/scripts/dev_run.sh"]
|
|
10
10
|
run_win = ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ".cozeproj/scripts/dev_run.ps1"]
|
|
11
|
-
deps = ["git"
|
|
11
|
+
deps = ["git"] # -> apt install git
|
|
12
12
|
pack = ["bash", ".cozeproj/scripts/pack.sh"]
|
|
13
13
|
pack_win = ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ".cozeproj/scripts/pack.ps1"]
|
|
14
14
|
validate = ["bash", ".cozeproj/scripts/validate.sh"]
|
|
@@ -17,4 +17,4 @@ validate_win = ["powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-
|
|
|
17
17
|
[deploy]
|
|
18
18
|
build = ["bash", ".cozeproj/scripts/deploy_build.sh"]
|
|
19
19
|
run = ["bash", ".cozeproj/scripts/deploy_run.sh"]
|
|
20
|
-
deps = ["git"
|
|
20
|
+
deps = ["git"] # -> apt install git
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run one-shot Taro builds from a local shadow workspace when the project lives
|
|
3
|
+
# on Coze Drive. This avoids repeated compiler stat/read traffic against the
|
|
4
|
+
# network filesystem while keeping final artifacts in the project directory.
|
|
5
|
+
set -Eeuo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
8
|
+
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd -P)"
|
|
9
|
+
PROJECT_ROOT="$(cd "${COZE_WORKSPACE_PATH:-$ROOT_DIR}" && pwd -P)"
|
|
10
|
+
|
|
11
|
+
if [ "$#" -eq 0 ]; then
|
|
12
|
+
set -- pnpm build
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
is_under_root() {
|
|
16
|
+
local path="$1"
|
|
17
|
+
local root="$2"
|
|
18
|
+
[ -n "$root" ] || return 1
|
|
19
|
+
case "$path" in
|
|
20
|
+
"$root"|"$root"/*) return 0 ;;
|
|
21
|
+
*) return 1 ;;
|
|
22
|
+
esac
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
is_coze_drive_workspace() {
|
|
26
|
+
local path="$1"
|
|
27
|
+
local root
|
|
28
|
+
local candidates=()
|
|
29
|
+
|
|
30
|
+
if [ -n "${COZE_DRIVE_ROOT:-}" ]; then
|
|
31
|
+
candidates+=("$COZE_DRIVE_ROOT")
|
|
32
|
+
fi
|
|
33
|
+
candidates+=("/Coze/Drive")
|
|
34
|
+
|
|
35
|
+
for root in "${candidates[@]}"; do
|
|
36
|
+
if [ -d "$root" ]; then
|
|
37
|
+
root="$(cd "$root" && pwd -P)"
|
|
38
|
+
else
|
|
39
|
+
root="${root%/}"
|
|
40
|
+
fi
|
|
41
|
+
if is_under_root "$path" "$root"; then
|
|
42
|
+
return 0
|
|
43
|
+
fi
|
|
44
|
+
done
|
|
45
|
+
|
|
46
|
+
return 1
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
prepare_dependencies() {
|
|
50
|
+
if [ "${COZE_SKIP_PREPARE_NODE_MODULES:-0}" = "1" ]; then
|
|
51
|
+
return
|
|
52
|
+
fi
|
|
53
|
+
echo "[local-build] Preparing dependencies..."
|
|
54
|
+
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if ! is_coze_drive_workspace "$PROJECT_ROOT"; then
|
|
58
|
+
prepare_dependencies
|
|
59
|
+
cd "$PROJECT_ROOT"
|
|
60
|
+
"$@"
|
|
61
|
+
exit $?
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
command -v rsync >/dev/null 2>&1 || {
|
|
65
|
+
echo "[local-build] rsync is required for Coze Drive local builds" >&2
|
|
66
|
+
exit 1
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
prepare_dependencies
|
|
70
|
+
|
|
71
|
+
BUILD_ROOT="${COZE_LOCAL_BUILD_ROOT:-/tmp/coze-taro-build}"
|
|
72
|
+
PROJECT_ID="$(basename "$PROJECT_ROOT")-$(printf '%s' "$PROJECT_ROOT" | cksum | awk '{print $1}')"
|
|
73
|
+
WORK_DIR="$BUILD_ROOT/$PROJECT_ID"
|
|
74
|
+
LOCAL_WORKSPACE="$WORK_DIR/workspace"
|
|
75
|
+
LOCK_DIR="$WORK_DIR.lock"
|
|
76
|
+
|
|
77
|
+
mkdir -p "$BUILD_ROOT"
|
|
78
|
+
if is_coze_drive_workspace "$(cd "$BUILD_ROOT" && pwd -P)"; then
|
|
79
|
+
echo "[local-build] COZE_LOCAL_BUILD_ROOT must not be on Coze Drive: $BUILD_ROOT" >&2
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
while ! mkdir "$LOCK_DIR" 2>/dev/null; do
|
|
84
|
+
echo "[local-build] Waiting for another local build for this project..."
|
|
85
|
+
sleep 1
|
|
86
|
+
done
|
|
87
|
+
|
|
88
|
+
cleanup() {
|
|
89
|
+
if [ -n "${SOURCE_SYNC_PID:-}" ]; then
|
|
90
|
+
kill "$SOURCE_SYNC_PID" 2>/dev/null || true
|
|
91
|
+
fi
|
|
92
|
+
rm -rf "$LOCAL_WORKSPACE"
|
|
93
|
+
rmdir "$WORK_DIR" 2>/dev/null || true
|
|
94
|
+
rmdir "$LOCK_DIR" 2>/dev/null || true
|
|
95
|
+
}
|
|
96
|
+
trap cleanup EXIT
|
|
97
|
+
|
|
98
|
+
mkdir -p "$LOCAL_WORKSPACE"
|
|
99
|
+
|
|
100
|
+
sync_source_to_local() {
|
|
101
|
+
rsync -rlgoD --checksum --delete \
|
|
102
|
+
--exclude '/.git/' \
|
|
103
|
+
--exclude '/node_modules/' \
|
|
104
|
+
--exclude '/server/node_modules/' \
|
|
105
|
+
--exclude '/logs/' \
|
|
106
|
+
--exclude '/dist/' \
|
|
107
|
+
--exclude '/dist-web/' \
|
|
108
|
+
--exclude '/dist-tt/' \
|
|
109
|
+
--exclude '/server/dist/' \
|
|
110
|
+
--exclude '/.next/' \
|
|
111
|
+
--exclude '/.nuxt/' \
|
|
112
|
+
--exclude '/.output/' \
|
|
113
|
+
--exclude '/coverage/' \
|
|
114
|
+
"$PROJECT_ROOT/" "$LOCAL_WORKSPACE/"
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
echo "[local-build] Syncing source to $LOCAL_WORKSPACE"
|
|
118
|
+
sync_source_to_local
|
|
119
|
+
|
|
120
|
+
link_node_modules() {
|
|
121
|
+
local source_node_modules="$1"
|
|
122
|
+
local shadow_parent="$2"
|
|
123
|
+
local shadow_node_modules="$shadow_parent/node_modules"
|
|
124
|
+
local target
|
|
125
|
+
|
|
126
|
+
if [ ! -e "$source_node_modules" ] && [ ! -L "$source_node_modules" ]; then
|
|
127
|
+
return
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
if [ -L "$source_node_modules" ]; then
|
|
131
|
+
target="$(readlink "$source_node_modules")"
|
|
132
|
+
else
|
|
133
|
+
target="$source_node_modules"
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
mkdir -p "$shadow_parent"
|
|
137
|
+
rm -rf "$shadow_node_modules"
|
|
138
|
+
ln -s "$target" "$shadow_node_modules"
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
link_node_modules "$PROJECT_ROOT/node_modules" "$LOCAL_WORKSPACE"
|
|
142
|
+
for workspace in server; do
|
|
143
|
+
if [ -f "$PROJECT_ROOT/$workspace/package.json" ]; then
|
|
144
|
+
link_node_modules "$PROJECT_ROOT/$workspace/node_modules" "$LOCAL_WORKSPACE/$workspace"
|
|
145
|
+
fi
|
|
146
|
+
done
|
|
147
|
+
|
|
148
|
+
SOURCE_SYNC_PID=""
|
|
149
|
+
if [ "${COZE_SYNC_SOURCE_TO_LOCAL:-0}" = "1" ]; then
|
|
150
|
+
(
|
|
151
|
+
while true; do
|
|
152
|
+
sleep "${COZE_SYNC_INTERVAL_SECONDS:-1}"
|
|
153
|
+
sync_source_to_local
|
|
154
|
+
done
|
|
155
|
+
) &
|
|
156
|
+
SOURCE_SYNC_PID=$!
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
rm -rf \
|
|
160
|
+
"$LOCAL_WORKSPACE/dist" \
|
|
161
|
+
"$LOCAL_WORKSPACE/dist-web" \
|
|
162
|
+
"$LOCAL_WORKSPACE/dist-tt" \
|
|
163
|
+
"$LOCAL_WORKSPACE/server/dist"
|
|
164
|
+
|
|
165
|
+
echo "[local-build] Building on local disk..."
|
|
166
|
+
(
|
|
167
|
+
cd "$LOCAL_WORKSPACE"
|
|
168
|
+
export COZE_WORKSPACE_PATH="$LOCAL_WORKSPACE"
|
|
169
|
+
"$@"
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
sync_output_back() {
|
|
173
|
+
local output_name="$1"
|
|
174
|
+
local local_output="$LOCAL_WORKSPACE/$output_name"
|
|
175
|
+
local project_output="$PROJECT_ROOT/$output_name"
|
|
176
|
+
|
|
177
|
+
if [ ! -e "$local_output" ]; then
|
|
178
|
+
return
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
if [ -L "$project_output" ] || [ -e "$project_output" ]; then
|
|
182
|
+
rm -rf "$project_output"
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
mkdir -p "$(dirname "$project_output")"
|
|
186
|
+
rsync -a --delete "$local_output/" "$project_output/"
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
echo "[local-build] Syncing build artifacts back to $PROJECT_ROOT"
|
|
190
|
+
sync_output_back dist
|
|
191
|
+
sync_output_back dist-web
|
|
192
|
+
sync_output_back dist-tt
|
|
193
|
+
sync_output_back server/dist
|
|
194
|
+
echo "[local-build] Build artifacts are ready in the project directory"
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
set -Eeuo pipefail
|
|
3
3
|
|
|
4
4
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
5
|
-
if [[ "${COZE_TARO_LOCAL_ACTIVE:-}" != "${ROOT_DIR}" ]]; then
|
|
6
|
-
exec node "$ROOT_DIR/.cozeproj/scripts/local-workspace.cjs" build "$@"
|
|
7
|
-
fi
|
|
8
5
|
COZE_WORKSPACE_PATH="${COZE_WORKSPACE_PATH:-${ROOT_DIR}}"
|
|
9
6
|
export COZE_WORKSPACE_PATH
|
|
10
7
|
|
|
@@ -17,12 +14,7 @@ else
|
|
|
17
14
|
echo "⚠️ Warning: init_env.sh not found, skipping environment init."
|
|
18
15
|
fi
|
|
19
16
|
echo "Installing dependencies..."
|
|
20
|
-
# 安装所有依赖(包含 Taro 核心和 React)
|
|
21
|
-
if [[ "${COZE_TARO_LOCAL_MIRROR:-}" != "1" ]]; then
|
|
22
|
-
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
17
|
echo "Building the Taro project..."
|
|
26
|
-
pnpm build
|
|
18
|
+
bash "$ROOT_DIR/.cozeproj/scripts/build-on-local-disk.sh" pnpm build
|
|
27
19
|
|
|
28
20
|
echo "Build completed successfully! Assets are in /dist"
|
|
@@ -2,13 +2,4 @@
|
|
|
2
2
|
set -Eeuo pipefail
|
|
3
3
|
|
|
4
4
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
5
|
-
|
|
6
|
-
exec node "$ROOT_DIR/.cozeproj/scripts/local-workspace.cjs" prepare "$@"
|
|
7
|
-
fi
|
|
8
|
-
COZE_WORKSPACE_PATH="${ROOT_DIR}"
|
|
9
|
-
export COZE_WORKSPACE_PATH
|
|
10
|
-
|
|
11
|
-
cd "${COZE_WORKSPACE_PATH}"
|
|
12
|
-
if [[ "${COZE_TARO_LOCAL_MIRROR:-}" != "1" ]]; then
|
|
13
|
-
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
14
|
-
fi
|
|
5
|
+
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
@@ -3,9 +3,6 @@ echo "⚙️ dev_run.sh 开始运行"
|
|
|
3
3
|
set -Eeuo pipefail
|
|
4
4
|
|
|
5
5
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
6
|
-
if [[ "${COZE_TARO_LOCAL_ACTIVE:-}" != "${ROOT_DIR}" ]]; then
|
|
7
|
-
exec node "$ROOT_DIR/.cozeproj/scripts/local-workspace.cjs" dev "$@"
|
|
8
|
-
fi
|
|
9
6
|
COZE_WORKSPACE_PATH="${COZE_WORKSPACE_PATH:-${ROOT_DIR}}"
|
|
10
7
|
export COZE_WORKSPACE_PATH
|
|
11
8
|
cd "${COZE_WORKSPACE_PATH}"
|
|
@@ -13,7 +10,7 @@ cd "${COZE_WORKSPACE_PATH}"
|
|
|
13
10
|
# ---------------------------------------------------------
|
|
14
11
|
# 项目级日志目录
|
|
15
12
|
# ---------------------------------------------------------
|
|
16
|
-
LOG_DIR="${
|
|
13
|
+
LOG_DIR="${COZE_WORKSPACE_PATH}/logs"
|
|
17
14
|
LOG_FILE="${LOG_DIR}/dev.log"
|
|
18
15
|
PID_FILE="${LOG_DIR}/dev.pid"
|
|
19
16
|
DEV_PID=""
|
|
@@ -124,9 +121,9 @@ process_belongs_to_workspace() {
|
|
|
124
121
|
"${COZE_WORKSPACE_PATH}"|"${COZE_WORKSPACE_PATH}"/*) return 0 ;;
|
|
125
122
|
esac
|
|
126
123
|
|
|
127
|
-
if [[ -n "${
|
|
124
|
+
if [[ -n "${COZE_LOCAL_WORKSPACE_PATH:-}" ]]; then
|
|
128
125
|
case "${cwd}" in
|
|
129
|
-
"${
|
|
126
|
+
"${COZE_LOCAL_WORKSPACE_PATH}"|"${COZE_LOCAL_WORKSPACE_PATH}"/*) return 0 ;;
|
|
130
127
|
esac
|
|
131
128
|
fi
|
|
132
129
|
|
|
@@ -224,11 +221,54 @@ cleanup_previous_run() {
|
|
|
224
221
|
# ---------------------------------------------------------
|
|
225
222
|
echo "📦 Installing dependencies..."
|
|
226
223
|
PNPM_BIN="$(command -v pnpm)"
|
|
227
|
-
|
|
228
|
-
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
229
|
-
fi
|
|
224
|
+
bash "$ROOT_DIR/.cozeproj/scripts/prepare-node-modules.sh" --prefer-frozen-lockfile --prefer-offline
|
|
230
225
|
echo "✅ Dependencies installed successfully!"
|
|
231
226
|
|
|
227
|
+
is_under_root() {
|
|
228
|
+
local path="$1"
|
|
229
|
+
local root="$2"
|
|
230
|
+
[ -n "$root" ] || return 1
|
|
231
|
+
case "$path" in
|
|
232
|
+
"$root"|"$root"/*) return 0 ;;
|
|
233
|
+
*) return 1 ;;
|
|
234
|
+
esac
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
is_coze_drive_workspace() {
|
|
238
|
+
local path="$1"
|
|
239
|
+
local root
|
|
240
|
+
local candidates=()
|
|
241
|
+
|
|
242
|
+
if [ -n "${COZE_DRIVE_ROOT:-}" ]; then
|
|
243
|
+
candidates+=("$COZE_DRIVE_ROOT")
|
|
244
|
+
fi
|
|
245
|
+
candidates+=("/Coze/Drive")
|
|
246
|
+
|
|
247
|
+
for root in "${candidates[@]}"; do
|
|
248
|
+
if [ -d "$root" ]; then
|
|
249
|
+
root="$(cd "$root" && pwd -P)"
|
|
250
|
+
else
|
|
251
|
+
root="${root%/}"
|
|
252
|
+
fi
|
|
253
|
+
if is_under_root "$path" "$root"; then
|
|
254
|
+
return 0
|
|
255
|
+
fi
|
|
256
|
+
done
|
|
257
|
+
|
|
258
|
+
return 1
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if is_coze_drive_workspace "${COZE_WORKSPACE_PATH}"; then
|
|
262
|
+
COZE_LOCAL_BUILD_ROOT="${COZE_LOCAL_BUILD_ROOT:-/tmp/coze-taro-build}"
|
|
263
|
+
COZE_LOCAL_WORKSPACE_PATH="${COZE_LOCAL_BUILD_ROOT}/$(basename "$COZE_WORKSPACE_PATH")-$(printf '%s' "$COZE_WORKSPACE_PATH" | cksum | awk '{print $1}')/workspace"
|
|
264
|
+
export COZE_LOCAL_BUILD_ROOT
|
|
265
|
+
export COZE_LOCAL_WORKSPACE_PATH
|
|
266
|
+
DEV_COMMAND=(env COZE_SKIP_PREPARE_NODE_MODULES=1 COZE_SYNC_SOURCE_TO_LOCAL=1 bash "$ROOT_DIR/.cozeproj/scripts/build-on-local-disk.sh" "${PNPM_BIN}" dev)
|
|
267
|
+
echo "📁 Taro dev will run from a local disk workspace."
|
|
268
|
+
else
|
|
269
|
+
DEV_COMMAND=("${PNPM_BIN}" dev)
|
|
270
|
+
fi
|
|
271
|
+
|
|
232
272
|
# ---------------------------------------------------------
|
|
233
273
|
# 3. 清理旧进程 + 端口
|
|
234
274
|
# ---------------------------------------------------------
|
|
@@ -260,7 +300,6 @@ start_service() {
|
|
|
260
300
|
echo "⚠️ 警告: COZE_PROJECT_DOMAIN_DEFAULT 未设置,使用 .env.local 中的配置"
|
|
261
301
|
fi
|
|
262
302
|
|
|
263
|
-
# 启动 Taro H5 和 NestJS Server
|
|
264
303
|
echo "Starting Taro H5 Dev Server and NestJS Server..."
|
|
265
304
|
|
|
266
305
|
: > "${LOG_FILE}"
|
|
@@ -268,7 +307,7 @@ start_service() {
|
|
|
268
307
|
DEV_PID="$(spawn_detached \
|
|
269
308
|
"${COZE_WORKSPACE_PATH}" \
|
|
270
309
|
"${LOG_FILE}" \
|
|
271
|
-
"$
|
|
310
|
+
"${DEV_COMMAND[@]}")"
|
|
272
311
|
if [[ -z "${DEV_PID}" ]]; then
|
|
273
312
|
echo "❌ 无法获取 dev 后台进程 PID"
|
|
274
313
|
return 1
|
|
@@ -291,45 +330,5 @@ start_service() {
|
|
|
291
330
|
echo "PID file: ${PID_FILE}"
|
|
292
331
|
}
|
|
293
332
|
|
|
294
|
-
warmup_preview() {
|
|
295
|
-
local base="http://127.0.0.1:${PORT}"
|
|
296
|
-
local waited=0
|
|
297
|
-
|
|
298
|
-
if ! command -v curl >/dev/null 2>&1; then
|
|
299
|
-
echo "Warmup skipped: curl is not available."
|
|
300
|
-
return 0
|
|
301
|
-
fi
|
|
302
|
-
|
|
303
|
-
echo "🔥 Warmup: waiting for web server to accept connections..."
|
|
304
|
-
while (( waited < 60 )); do
|
|
305
|
-
if curl -s -o /dev/null --max-time 3 "${base}/"; then
|
|
306
|
-
break
|
|
307
|
-
fi
|
|
308
|
-
sleep 2
|
|
309
|
-
waited=$(( waited + 2 ))
|
|
310
|
-
done
|
|
311
|
-
|
|
312
|
-
local app_config="${COZE_WORKSPACE_PATH}/src/app.config.ts"
|
|
313
|
-
local pages=""
|
|
314
|
-
if [[ -f "${app_config}" ]]; then
|
|
315
|
-
pages=$(grep -oE "[\"']pages/[^\"']+[\"']" "${app_config}" | tr -d "\"'" | sort -u || true)
|
|
316
|
-
fi
|
|
317
|
-
|
|
318
|
-
local p
|
|
319
|
-
for p in "/" "/app.config.ts"; do
|
|
320
|
-
echo "🔥 Warmup ${p}"
|
|
321
|
-
curl -s -o /dev/null --max-time 300 "${base}${p}" || echo "Warmup ${p} timed out or failed (ignored)."
|
|
322
|
-
done
|
|
323
|
-
for p in ${pages}; do
|
|
324
|
-
echo "🔥 Warmup /${p}.tsx"
|
|
325
|
-
curl -s -o /dev/null --max-time 300 "${base}/${p}.tsx" || echo "Warmup /${p}.tsx timed out or failed (ignored)."
|
|
326
|
-
done
|
|
327
|
-
}
|
|
328
|
-
|
|
329
333
|
echo "Starting HTTP services on port ${PORT} (web) and ${SERVER_PORT} (server)..."
|
|
330
334
|
start_service
|
|
331
|
-
|
|
332
|
-
if [[ "${COZE_TARO_LOCAL_MIRROR:-}" = "1" && "${COZE_DEV_SKIP_WARMUP:-0}" != "1" ]]; then
|
|
333
|
-
warmup_preview || true
|
|
334
|
-
echo "✅ Warmup finished (or timed out). Preview should load fast now."
|
|
335
|
-
fi
|
|
@@ -2,17 +2,47 @@
|
|
|
2
2
|
set -Eeuo pipefail
|
|
3
3
|
|
|
4
4
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
5
|
-
if [[ "${COZE_TARO_LOCAL_ACTIVE:-}" != "${ROOT_DIR}" ]]; then
|
|
6
|
-
exec node "$ROOT_DIR/.cozeproj/scripts/local-workspace.cjs" pack "$@"
|
|
7
|
-
fi
|
|
8
5
|
COZE_WORKSPACE_PATH="${COZE_WORKSPACE_PATH:-${ROOT_DIR}}"
|
|
9
6
|
export COZE_WORKSPACE_PATH
|
|
10
7
|
|
|
11
8
|
cd "${COZE_WORKSPACE_PATH}"
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
is_under_root() {
|
|
11
|
+
local path="$1"
|
|
12
|
+
local root="$2"
|
|
13
|
+
[ -n "$root" ] || return 1
|
|
14
|
+
case "$path" in
|
|
15
|
+
"$root"|"$root"/*) return 0 ;;
|
|
16
|
+
*) return 1 ;;
|
|
17
|
+
esac
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
is_coze_drive_workspace() {
|
|
21
|
+
local path="$1"
|
|
22
|
+
local root
|
|
23
|
+
local candidates=()
|
|
24
|
+
|
|
25
|
+
if [ -n "${COZE_DRIVE_ROOT:-}" ]; then
|
|
26
|
+
candidates+=("$COZE_DRIVE_ROOT")
|
|
27
|
+
fi
|
|
28
|
+
candidates+=("/Coze/Drive")
|
|
29
|
+
|
|
30
|
+
for root in "${candidates[@]}"; do
|
|
31
|
+
if [ -d "$root" ]; then
|
|
32
|
+
root="$(cd "$root" && pwd -P)"
|
|
33
|
+
else
|
|
34
|
+
root="${root%/}"
|
|
35
|
+
fi
|
|
36
|
+
if is_under_root "$path" "$root"; then
|
|
37
|
+
return 0
|
|
38
|
+
fi
|
|
39
|
+
done
|
|
40
|
+
|
|
41
|
+
return 1
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# build_weapp.sh - 通过 PID 文件精确杀掉自己上次的构建进程
|
|
45
|
+
PID_FILE="/tmp/coze-build_weapp.pid"
|
|
16
46
|
|
|
17
47
|
# 杀掉上次的构建进程组
|
|
18
48
|
if [ -f "$PID_FILE" ]; then
|
|
@@ -26,16 +56,15 @@ if [ -f "$PID_FILE" ]; then
|
|
|
26
56
|
rm -f "$PID_FILE"
|
|
27
57
|
fi
|
|
28
58
|
|
|
29
|
-
# 用 setsid
|
|
30
|
-
if
|
|
31
|
-
setsid pnpm build:pack &
|
|
59
|
+
# 用 setsid 创建新的进程组,方便下次整组杀掉
|
|
60
|
+
if is_coze_drive_workspace "${COZE_WORKSPACE_PATH}"; then
|
|
61
|
+
setsid bash "$ROOT_DIR/.cozeproj/scripts/build-on-local-disk.sh" pnpm build:pack &
|
|
32
62
|
else
|
|
33
|
-
pnpm build:pack &
|
|
63
|
+
setsid pnpm build:pack &
|
|
34
64
|
fi
|
|
35
|
-
|
|
36
|
-
echo "$BUILD_PID" > "$PID_FILE"
|
|
65
|
+
echo $! > "$PID_FILE"
|
|
37
66
|
|
|
38
67
|
echo "构建已启动 (PID: $(cat $PID_FILE))"
|
|
39
68
|
|
|
40
|
-
wait
|
|
69
|
+
wait $!
|
|
41
70
|
rm -f "$PID_FILE"
|