Files
tianshu-engine/scripts/pack-html.cjs

89 lines
2.4 KiB
JavaScript

const { execSync } = require('child_process')
const fs = require('fs')
const path = require('path')
const AdmZip = require('adm-zip')
const root = path.join(__dirname, '..')
const dist = path.join(root, 'dist')
const release = path.join(root, 'release')
const jsonPath = path.join(root, 'public', 'scenes', 'demo.json')
// 1. Verify JSON exists and is valid
if (!fs.existsSync(jsonPath)) {
console.error('❌ public/scenes/demo.json not found')
process.exit(1)
}
try {
JSON.parse(fs.readFileSync(jsonPath, 'utf-8'))
console.log('✅ JSON valid')
} catch (e) {
console.error('❌ JSON parse error:', e.message)
process.exit(1)
}
// 2. Build
console.log('🔨 Building...')
execSync('npx vite build', { cwd: root, stdio: 'inherit' })
// 3. Copy public assets into dist
console.log('📁 Copying assets...')
;['audio', 'images', 'scenes', 'subtitles'].forEach((dir) => {
const src = path.join(root, 'public', dir)
const dest = path.join(dist, dir)
if (fs.existsSync(src)) {
// Use Node.js fs module for cross-platform compatibility
copyRecursiveSync(src, dest)
}
})
// Helper function to copy directories recursively
function copyRecursiveSync(src, dest) {
const exists = fs.existsSync(src)
const stats = exists && fs.statSync(src)
const isDirectory = exists && stats.isDirectory()
if (isDirectory) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true })
}
fs.readdirSync(src).forEach((childItemName) => {
copyRecursiveSync(
path.join(src, childItemName),
path.join(dest, childItemName)
)
})
} else {
fs.copyFileSync(src, dest)
}
}
// 4. Zip
console.log('📦 Creating zip...')
fs.rmSync(release, { recursive: true, force: true })
fs.mkdirSync(release, { recursive: true })
const outName = 'mygame'
const zip = new AdmZip()
// Add all files from dist directory to the zip
const addFilesToZip = (dir) => {
const files = fs.readdirSync(dir)
files.forEach((file) => {
const filePath = path.join(dir, file)
const stat = fs.statSync(filePath)
if (stat.isDirectory()) {
addFilesToZip(filePath)
} else {
const relativePath = path.relative(dist, filePath)
zip.addLocalFile(filePath, '', relativePath)
}
})
}
addFilesToZip(dist)
// Write the zip file
const zipPath = path.join(release, `${outName}.zip`)
zip.writeZip(zipPath)
console.log(`✅ Packaged: release/${outName}.zip`)