-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmoveDist.py
More file actions
125 lines (102 loc) · 4.36 KB
/
moveDist.py
File metadata and controls
125 lines (102 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import os
import re
import shutil
def moveDist():
dirs = [d for d in os.listdir(".") if os.path.isdir(d)]
latest_version_dir = 'utools'
return latest_version_dir
# 删除指定目录下的文件夹
def deleteFiles(dir, delete_dir):
window_dir = os.path.join(dir, delete_dir)
if os.path.exists(window_dir):
shutil.rmtree(window_dir)
# 删除指定文件
def deleteFile(dir, delete_file):
file_path = os.path.join(dir, delete_file)
if os.path.exists(file_path):
os.remove(file_path)
# 【新增】定义忽略规则:过滤 .map 文件、隐藏文件、node_modules 等
def get_ignore_patterns(path, names):
ignored = []
for name in names:
# 过滤 Source Maps (.map),这是减小体积的关键
if name.endswith(".map"):
ignored.append(name)
# 过滤系统隐藏文件 (.DS_Store 等) 和 git 目录
elif name.startswith(".") or name == "__pycache__":
ignored.append(name)
# 过滤 node_modules (双重保险)
elif name == "node_modules":
ignored.append(name)
# 过滤日志文件
elif name.endswith(".log"):
ignored.append(name)
return ignored
# 通用的复制逻辑(合并了你原来的 moveDistFiles, movePublicFiles, moveFiles)
# 增加了过滤逻辑
def smart_copy(src_folder, target_folder):
if not os.path.exists(src_folder):
print(f"目录 {src_folder} 不存在")
return
# 强制先创建目标目录
if os.path.exists(target_folder) and not os.path.isdir(target_folder):
os.remove(target_folder)
os.makedirs(target_folder, exist_ok=True)
for item in os.listdir(src_folder):
# 应用过滤规则到顶层文件
if (
item.endswith(".map")
or item.startswith(".")
or item == "node_modules"
or item == "__pycache__"
):
continue
src_path = os.path.join(src_folder, item)
dst_path = os.path.join(target_folder, item)
print(f" >> {src_path}")
if os.path.isfile(src_path):
shutil.copy(src_path, target_folder)
elif os.path.isdir(src_path):
# 关键:在递归复制文件夹时应用 ignore 规则
shutil.copytree(
src_path, dst_path, dirs_exist_ok=True, ignore=get_ignore_patterns
)
else:
print(f"未知类型文件: {src_path}")
if __name__ == "__main__":
latest_version_dir = moveDist()
print(f"目标版本目录: {latest_version_dir}\n")
# 1. 处理 main (frontend_main/dist -> v1.0.0/main)
deleteFiles(latest_version_dir, "main")
print("正在更新 main 文件夹...")
main_target_dir = os.path.join(latest_version_dir, "main")
smart_copy(os.path.join("frontend_main", "dist"), main_target_dir)
print("main 文件夹更新完成\n")
# 2. 处理 window (frontend_window/dist -> v1.0.0/window)
deleteFiles(latest_version_dir, "window")
print("正在更新 window 文件夹...")
window_target_dir = os.path.join(latest_version_dir, "window")
smart_copy(os.path.join("frontend_window", "dist"), window_target_dir)
print("window 文件夹更新完成\n")
# 3. 处理 preload (backend/public -> v1.0.0/)
deleteFile(latest_version_dir, "preload.js")
deleteFile(latest_version_dir, "window_preload.js")
deleteFile(latest_version_dir, "fast_window_preload.js")
print("正在更新 preload 相关文件...")
smart_copy(os.path.join("backend", "public"), latest_version_dir)
print("preload 相关文件更新完成\n")
# 4. 处理 fast_window (fast_window -> v1.0.0/fast_window)
deleteFiles(latest_version_dir, "fast_window")
print("正在更新 fast_window 文件夹...")
fast_window_target_dir = os.path.join(latest_version_dir, "fast_window")
smart_copy("fast_window", fast_window_target_dir)
print("fast_window 相关文件更新完成")
# 5. 在这几个目录下查.gitkeep文件
for target_dir in [main_target_dir, window_target_dir, fast_window_target_dir]:
print(f"正在检查目录并添加 .gitkeep: {target_dir}")
os.makedirs(target_dir, exist_ok=True)
keep_file = os.path.join(target_dir, ".gitkeep")
if not os.path.exists(keep_file):
with open(keep_file, "w") as f:
pass
print(f" 已创建: {keep_file}")