const { build } = require("esbuild"); const fs = require("fs"); const path = require("path"); const dotenv = require("dotenv"); // mongodb 的可选原生模块:打包时标记为 external,运行时不需要 const mongodbOptionals = [ "kerberos", "mongodb-client-encryption", "@mongodb-js/zstd", "@aws-sdk/credential-providers", "snappy", "gcp-metadata", "aws4", "socks", ]; function cleanDist() { const distDir = path.resolve(__dirname, "dist"); fs.rmSync(distDir, { recursive: true, force: true }); fs.mkdirSync(distDir, { recursive: true }); } function getEmbeddedEnvBanner() { const envPath = path.resolve(__dirname, ".env.gk"); const envRaw = fs.existsSync(envPath) ? fs.readFileSync(envPath, "utf8") : ""; const parsed = envRaw ? dotenv.parse(envRaw) : {}; const payload = JSON.stringify(parsed); return [ "(() => {", ` const embeddedEnv = ${payload};`, " if (!process.env.NODE_ENV) process.env.NODE_ENV = 'gk';", " for (const [key, value] of Object.entries(embeddedEnv)) {", " if (process.env[key] == null || process.env[key] === '') process.env[key] = value;", " }", "})();", ].join("\n"); } cleanDist(); build({ entryPoints: ["./transfer.js", "./corpid.js", "./replace-qrcode-url.js"], outdir: "./dist", entryNames: "[name]", platform: "node", bundle: true, minify: false, sourcemap: false, target: ["node18"], external: mongodbOptionals, banner: { js: getEmbeddedEnvBanner(), }, }).catch(() => process.exit(1));