Files
shanxia2.0/miniprogram/scripts/remind-production-api-url.mjs
2026-09-26 11:59:39 +08:00

86 lines
3.2 KiB
JavaScript

/**
* 生产发版 / 编译前提醒:检查 config/env.js 的 APP_ENV。
* - 默认:打印当前环境 + 醒目提醒(不中断)。
* - 严格:`node scripts/remind-production-api-url.mjs --strict`
* 若 APP_ENV 不是 production,或生产 API 仍含本机地址,则 exit 1。
*
* 上传微信前务必执行:npm run release:check-api
*/
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const root = path.resolve(__dirname, '..')
const envPath = path.join(root, 'config', 'env.js')
const readAppEnv = (raw) => {
// 只认行首 export,避免命中注释里的示例「APP_ENV = 'production'」
const m = raw.match(/^export\s+const\s+APP_ENV\s*=\s*['"]([^'"]+)['"]/m)
return m ? m[1] : ''
}
const productionBlockLooksLocal = (raw) => {
const m = raw.match(/production:\s*\{([\s\S]*?)\n\s*\}/)
if (!m) return false
return /127\.0\.0\.1|localhost/.test(m[1])
}
const raw = fs.readFileSync(envPath, 'utf8')
const appEnv = readAppEnv(raw) || '?'
const color =
appEnv === 'production' ? '\x1b[32m' : appEnv === 'local' ? '\x1b[31m' : '\x1b[33m'
const reset = '\x1b[0m'
console.log(
[
'',
'╔════════════════════════════════════════════════════════════╗',
`║ 当前小程序 APP_ENV = ${appEnv.padEnd(36)}║`,
appEnv === 'production'
? '║ ✅ 生产配置 ║'
: '║ ⚠️ 非生产!正式上传微信前请改为 production ║',
'║ 文件:config/env.js ║',
'║ 检查:npm run release:check-api ║',
'╚════════════════════════════════════════════════════════════╝',
''
].join('\n').replace(/^/gm, color) + reset
)
if (appEnv !== 'production') {
console.warn(
'\x1b[33m%s\x1b[0m',
[
'发版步骤:',
" 1. 修改 config/env.js → export const APP_ENV = 'production'",
' 2. npm run release:check-api(必须通过)',
' 3. HBuilderX:发行 → 小程序-微信 → 再上传',
''
].join('\n')
)
}
const strict = process.argv.includes('--strict')
if (strict) {
if (appEnv !== 'production') {
console.error(
`\x1b[31m[release-check]\x1b[0m APP_ENV='${appEnv}',发版须改为 'production'。`
)
process.exit(1)
}
if (productionBlockLooksLocal(raw)) {
console.error(
'\x1b[31m[release-check]\x1b[0m production 预设中仍含 127.0.0.1 / localhost,请先修正。'
)
process.exit(1)
}
if (!/https:\/\/w\.shanxiachem\.com\/api/.test(raw)) {
console.error(
'\x1b[31m[release-check]\x1b[0m 未在 env.js 中发现生产 API https://w.shanxiachem.com/api。'
)
process.exit(1)
}
console.warn('\x1b[32m[release-check]\x1b[0m APP_ENV=production,生产 API 配置检查通过。')
}