#!/usr/bin/env node // wcsc.exe md5 = "d45f45f109afa238cd83c8ad1d0e2a5e" const version = "20220423"; const { spawn } = require("child_process"); const fs = require("fs"); const path = require("path"); const args = process.argv.slice(2); const wcscPath = path.resolve(__dirname, "./wcsc.bin"); const DEBUG_OUTPUT = process.env["WX_DEBUG_COMPILER_OUTPUT"]; // 向错误输出流写入信息 process.stderr.write(`环境及执行信息: 编译器版本: ${version} node版本: ${process.version} 参数: ${args.join(' ')} 具体报错: `); function encode1(s) { return encodeURI(s).replace( /%(u[0-9A-F]{4})|(%[0-9A-F]{2})/gm, function ($0, $1, $2) { return ($1 && "\\" + $1.toLowerCase()) || decodeURI($2); } ); } if (args.includes("-ll")) { const wcsc = spawn(wcscPath, args, { cwd: process.cwd(), }); const spwanData = [], errData = []; wcsc.stdout.on("data", (e) => { spwanData.push(e); }); wcsc.stderr.on("data", (e) => { errData.push(e); }); wcsc.on("close", (n) => { if (0 === n) { let str = Buffer.concat(spwanData).toString(); DEBUG_OUTPUT && fs.writeFileSync(`${DEBUG_OUTPUT}/linux_output.js`, str); const resultSplit = str.split("="); const tempObj = {}; for ( let i = 0, total = resultSplit.length; i < total && resultSplit[i + 1]; i += 2 ) { // a=b ---> a: b const key = resultSplit[i]; if (key === "version") continue; tempObj[key] = resultSplit[i + 1].replace( /[^\\]((\\x[\da-f]{2}|\\u[\da-f]{4})){1,}/g, function ($0, $1, $2) { return eval('"' + $0 + '"'); } ); } const resultObj = { common: tempObj.comm, pageWxss: {}, }; for (const key in tempObj) { if (key.endsWith(".wxss")) { resultObj.pageWxss[key] = tempObj[key]; } } let result = JSON.stringify(resultObj); result = result.replace(/\\\\/g, "\\"); process.stdout.write(result); } else { const err = Buffer.concat(errData).toString(); DEBUG_OUTPUT && fs.writeFileSync(`${DEBUG_OUTPUT}/linux_err.js`, err); process.stderr.write(err); process.exitCode = n; } }); } else { const wcsc = spawn(wcscPath, args, { cwd: process.cwd(), stdio: "inherit", }); wcsc.on("close", (code) => { process.exitCode = code; }); }