Files
replypier/frontend/scripts/build-webclient-prod.ts
T
WangShen007 20fef2b9f3 chore: settle product naming across app, widget and deployments
One word everywhere: ReplyPier in UI copy, package and image names, the
replypier.site domains (app/api/docs/help), REPLYPIER_* settings and the
--rp-* design tokens.

- public widget API is window.ReplyPier with replypierId / replypierBaseUrl /
  replypierConfig / replypierToken, loader at webclient/replypier.min.js;
  both bundles rebuilt from source
- NOTICE, llms.txt, CONTRIBUTING, HELP_CENTER_INFRA and the demo runtime
  config rewritten; the demo config ships no third-party keys
- migration adds the ReplyPier managed model value to the AI model enum
- local compose project, database, role, volume and Docker network carry the
  same name
2026-10-26 00:57:22 +08:00

70 lines
2.3 KiB
TypeScript

import { build } from 'esbuild'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
import * as dotenv from 'dotenv'
import * as fs from 'fs'
import * as path from 'path'
// Load production environment variables
dotenv.config({ path: '.env.prod' })
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
async function buildWebClientProd() {
try {
console.log('Building webclient with production configuration...')
// Config is now generated by the prebuild step (generate-prod-env.ts)
// No need to copy config files here
// Set NODE_ENV to production for the build
process.env.NODE_ENV = 'production'
// Baked DEFAULT base URL. This only sets the fallback; getBaseUrl() still
// resolves window.replypierBaseUrl / window.APP_CONFIG at runtime, so an
// env change on a deployment needs no rebuild of this artifact.
const apiUrl = process.env.VITE_API_URL || 'https://api.replypier.site/api/v1'
console.log('Using API URL:', apiUrl)
const sourceFile = resolve(dirname(__dirname), 'src/webclient/replypier.js')
await build({
entryPoints: [sourceFile],
bundle: true,
minify: true,
outfile: resolve(dirname(__dirname), 'public/webclient/replypier.min.js'),
format: 'iife',
target: ['es2015'],
loader: {
'.svg': 'text',
},
define: {
'process.env.NODE_ENV': '"production"',
'__REPLYPIER_API_URL__': JSON.stringify(apiUrl),
},
})
// Copy output to dist/webclient directory
const publicWebclientPath = resolve(dirname(__dirname), 'public/webclient/replypier.min.js')
const distWebclientDir = resolve(dirname(__dirname), 'dist/webclient')
const distWebclientPath = resolve(distWebclientDir, 'replypier.min.js')
// Ensure dist/webclient directory exists
if (!fs.existsSync(distWebclientDir)) {
fs.mkdirSync(distWebclientDir, { recursive: true })
}
// Copy the built file to dist/webclient
fs.copyFileSync(publicWebclientPath, distWebclientPath)
console.log('Production web client copied to dist/webclient/')
console.log('Production web client built successfully!')
} catch (error) {
console.error('Production build failed:', error)
process.exit(1)
}
}
buildWebClientProd()