From fa2e1ae43c5976ba08cf3f00a1531ad4640d9050 Mon Sep 17 00:00:00 2001 From: xmz7891 Date: Wed, 7 Oct 2026 20:34:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=EF=BC=9A=E9=82=A3=E4=B8=AA?= =?UTF-8?q?=20JS=20bug=20=E5=9C=A8=E5=81=9A=E5=AE=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E5=8F=88=E8=B8=A9=E4=BA=86=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=EF=BC=88=E5=90=8C=E4=B8=80=E4=B8=AA=E5=9D=91=EF=BC=8C=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在真实中转上实测管理页时,node --check 报第 46 行语法错。 出事的是注释: // ⚠ 这里必须是 \\n(反斜杠+n),不能是 \n —— ^^^^ 被 Python 变成真换行 **注释为了举例说明「不能写那个转义」,自己写了一个转义**, 于是注释被断成两行,整段 (此时还是**未经过 Python 转义**的原文) + # 这还不够 —— 真正的坑在 Python 解释转义之后。 + # 所以更准的办法:能用 import 的就 import,渲染出来再看。 + # 不能 import 的,就退化成「源码原文」扫描,并说明局限。 + scripts = re.findall(r"]*>(.*?)", text, re.S) + scripts = [s for s in scripts if s.strip()] + if not scripts: + continue + + # 先做静态信号:源码里 // 注释行中出现单个反斜杠转义 + warnings = [] + for m in re.finditer(r"^[ \t]*//.*$", text, re.M): + line = m.group(0) + # 注释里出现 \n \r \t 这样的转义(单反斜杠) + if re.search(r"(? 现在 21/21 全过 > 「23 项测试通过」和「功能能用」是两件事 —— 管理页那个 JS bug > 就是在 23 项全绿的情况下进去的,测试只查 token 存不存在,不查语法。 +### 7.1 那个 JS bug 后来又踩了一遍(同一个坑,第二次) + +**在做完上面这些修复之后,加「改码」功能时又踩了一次,而且更讽刺。** + +在**真实中转**上实测管理页时,用 `node --check` 检查页面内嵌的 JS: + +``` +SyntaxError: Invalid or unexpected token (第 46 行) +``` + +出事的是这段注释(`admin.py` 源码): + +```python +// ⚠ 这里必须是 \\n(反斜杠+n),不能是 \n —— + ^^^^ + 这个 \n 被 Python 变成真实换行 +``` + +**注释为了举例说明「不能写 `\n`」,自己写了一个 `\n`。** +于是注释被断成两行,`//` 行注释不能跨行 → 整段 `