// 把构建机本地署名规范化成一份纯文本,供 build.bat 用 for /f 直接读文件。 // // 为什么不用 PowerShell 管道:PowerShell 5.1 的 Get-Content 默认按系统 ANSI 码页读, // 输出再经 cmd(chcp 65001)解码一次,中文会被转成乱码——曾导致日志写着 // "internal signature injected",但 exe 里的字节和预期对不上。 // 用 Node 读 UTF-8 再写回,同时剥掉可能的 BOM 与首尾空白,保证注入值稳定。 import { existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { dirname, join } from 'node:path' const root = dirname(import.meta.dirname) const src = join(root, 'deploy', 'signature.local.txt') const dst = join(root, 'deploy', 'signature.build.txt') // 没有源署名时要清掉上次构建留下的产物,否则删掉署名文件后仍会注入旧值并通过校验。 if (!existsSync(src)) { rmSync(dst, { force: true }) console.log(' no internal signature file') process.exit(0) } const first = readFileSync(src, 'utf8').replace(/^\uFEFF/, '').split(/\r?\n/, 1)[0].trim() if (first === '') { rmSync(dst, { force: true }) console.log(' internal signature file is empty') process.exit(0) } writeFileSync(dst, first, 'utf8') console.log(' internal signature normalized')