scripts/README.md
This directory contains scripts for building and packaging AionUi across different platforms and architectures.
| Script | Lines | Purpose |
|---|---|---|
build-with-builder.js | 116 | Coordinates Electron Forge and electron-builder |
rebuildNativeModules.js | 219 | Unified native module rebuild utility |
beforeBuild.js | 38 | Pre-packaging native module rebuild hook |
afterPack.js | 67 | Post-packaging verification (Linux only) |
afterSign.js | 47 | macOS code signing and notarization |
Total: 487 lines (down from 711 lines before optimization)
npm run dist:*
↓
build-with-builder.js
↓
├─→ Electron Forge (webpack compilation)
↓
electron-builder
↓
├─→ beforeBuild.js → rebuildNativeModules.js (all platforms)
├─→ Package app
├─→ afterPack.js → rebuildNativeModules.js (Linux only)
└─→ afterSign.js (macOS only)
rebuildNativeModules.js - Unified Rebuild UtilityThis is the core module that handles all native module rebuilding. It provides:
rebuildWithElectronRebuild(options)
beforeBuild.jsbetter-sqlite3rebuildSingleModule(options)
afterPack.jsverifyModuleBinary(moduleRoot, moduleName)
Helper utilities:
normalizeArch(): Normalize architecture namesgetModulesToRebuild(): Get platform-specific module listbuildEnvironment(): Create rebuild environment variablesbetter-sqlite3node-pty (uses prebuilt binaries)better-sqlite3beforeBuild hook onlybetter-sqlite3beforeBuild: Rebuild in source directoryafterPack: Rebuild better-sqlite3 in packaged app# Build for macOS
npm run dist:mac
# Build for Windows
npm run dist:win
# Build for Linux
npm run dist:linux
const { rebuildWithElectronRebuild } = require('./scripts/rebuildNativeModules');
rebuildWithElectronRebuild({
platform: 'linux',
arch: 'arm64',
electronVersion: '37.3.1',
});
const { rebuildSingleModule } = require('./scripts/rebuildNativeModules');
rebuildSingleModule({
moduleName: 'better-sqlite3',
moduleRoot: '/path/to/app.asar.unpacked/node_modules/better-sqlite3',
platform: 'linux',
arch: 'arm64',
electronVersion: '37.3.1',
});
node_modules/)electron-rebuild for all modulesbetter-sqlite3 in packaged app (app.asar.unpacked/)prebuild-install for faster builds (downloads prebuilt binary)Symptom: Error: Cannot find module 'better-sqlite3'
Solution: Check that:
electron-builder.yml → files sectionelectron-builder.yml → asarUnpack sectionbeforeBuild.js ran successfully during buildafterPack.js ran successfullySymptom: App crashes with segfault or binary incompatibility error
Solution:
beforeBuild.js rebuilt for correct architectureafterPack.js rebuilt the moduleSymptom: Native module rebuild fails during cross-arch build
Solution:
node-pty (uses prebuilt binaries)beforeBuild and afterPackrelease.sh (67 lines) - use npm version insteadrebuildNativeModules.js (219 lines) - unified utilitybuild-with-builder.js: 321 → 116 linesbeforeBuild.js: 95 → 38 linesafterPack.js: 181 → 67 linesWhen modifying build scripts:
/electron-builder.yml - electron-builder configuration/forge.config.ts - Electron Forge configuration/.github/workflows/build-and-release.yml - CI/CD pipeline/package.json - Build scripts and dependencies