| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- # -*- coding: utf-8 -*-
- """前端驼峰迁移:src 下 .vue/.js 的全小写 snake_case 标识符 -> 驼峰。
- .vue 只处理 <template> 与 <script>,跳过 <style>。
- 排除清单:证书文件名、路由枚举值、CSS 类名、import 路径、第三方 SDK 字段、
- 前端框架自身配置 key、localStorage key、短信场景枚举值 —— 这些不是接口字段。
- """
- import re
- from pathlib import Path
- ROOT = Path(r"F:\shop\yoshop2.0-store")
- SRC = ROOT / "src"
- EXCLUDE = {
- # 微信支付证书文件名(文案)
- "apiclient_cert", "apiclient_key",
- # 商品列表 listType 枚举值(路由 query,前后端约定值)
- "on_sale", "off_sale", "sold_out",
- # CSS 类名片段
- "text_right",
- # import 路径(文件名)
- "lazy_use",
- # 第三方(云存储/短信/支付)固定字段
- "access_key", "access_key_id", "access_key_secret",
- "secret_id", "secret_key", "pub_key",
- # 前端框架自身配置 / localStorage key(与后端接口无关)
- "multi_tab", "fixed_header", "fixed_sidebar", "sidebar_type",
- "nav_theme", "content_width", "auto_hide_header",
- "app_language", "app_theme", "is_mobile",
- "region_tree", "order_export_form",
- # 短信场景枚举值
- "order_pay",
- }
- SNAKE = re.compile(r'\b([a-z]+(_[a-z0-9]+)+)\b')
- def to_camel(s):
- return re.sub(r'_([a-z0-9])', lambda m: m.group(1).upper(), s)
- def convert_vue(text):
- """按 <template>/<script>/<style> 分段,只处理前两者。"""
- parts = re.split(r'(<style[^>]*>[\s\S]*?</style>)', text)
- out = []
- for p in parts:
- if p.startswith("<style"):
- out.append(p)
- else:
- out.append(SNAKE.sub(snake_repl, p))
- return "".join(out)
- def snake_repl(m):
- t = m.group(1)
- if t in EXCLUDE:
- return t
- return to_camel(t)
- changed = []
- total = 0
- for f in sorted(list(SRC.rglob("*.vue")) + list(SRC.rglob("*.js"))):
- text = f.read_text(encoding="utf-8", errors="replace")
- new = convert_vue(text) if f.suffix == ".vue" else SNAKE.sub(snake_repl, text)
- if new != text:
- n = sum(1 for a, b in zip(text.split("\n"), new.split("\n")) if a != b)
- total += len(SNAKE.findall(re.sub(r'|'.join(map(lambda e: re.escape(e), EXCLUDE)), '', new)))
- f.write_text(new, encoding="utf-8", newline="")
- changed.append((str(f.relative_to(ROOT)), n))
- print("改动 %d 个文件" % len(changed))
- for name, n in sorted(changed, key=lambda x: -x[1])[:20]:
- print(" %-64s ~%d 行" % (name, n))
|