fix: production renderer, app icon, dev:web script
- Add Bradly app icon (.icns + .png) for macOS - Fix Electron production mode: Express serves built renderer files - Add extraResource for renderer + remotion-bundle in forge.config.ts - Fix dev:web script to use npx tsx
This commit is contained in:
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 797 KiB |
@@ -11,11 +11,17 @@ const config: ForgeConfig = {
|
|||||||
packagerConfig: {
|
packagerConfig: {
|
||||||
name: 'Bradly',
|
name: 'Bradly',
|
||||||
executableName: 'bradly',
|
executableName: 'bradly',
|
||||||
|
icon: './assets/icon',
|
||||||
asar: {
|
asar: {
|
||||||
// Remotion compositor binaries MUST be outside app.asar
|
// Remotion compositor binaries MUST be outside app.asar
|
||||||
// because they are native executables that need direct filesystem access
|
// because they are native executables that need direct filesystem access
|
||||||
unpack: '{**/node_modules/@remotion/compositor-*/**,**/node_modules/@remotion/renderer/**}',
|
unpack: '{**/node_modules/@remotion/compositor-*/**,**/node_modules/@remotion/renderer/**}',
|
||||||
},
|
},
|
||||||
|
// Include the built renderer and Remotion bundle as extra resources
|
||||||
|
extraResource: [
|
||||||
|
'./out/renderer',
|
||||||
|
'./out/remotion-bundle',
|
||||||
|
],
|
||||||
// Ignore development files during packaging
|
// Ignore development files during packaging
|
||||||
ignore: [
|
ignore: [
|
||||||
/^\/src$/,
|
/^\/src$/,
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
"main": "out/main/index.js",
|
"main": "out/main/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "electron-vite dev",
|
"dev": "electron-vite dev",
|
||||||
"dev:web": "tsx server.ts",
|
"dev:web": "npx tsx server.ts",
|
||||||
"build": "electron-vite build",
|
"build": "electron-vite build",
|
||||||
"build:web": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
|
"build:web": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
|
||||||
"start": "electron-vite preview",
|
"start": "electron-vite preview",
|
||||||
|
|||||||
@@ -71,6 +71,26 @@ async function startExpressServer(): Promise<void> {
|
|||||||
const { createExpressApp } = await import('../../server');
|
const { createExpressApp } = await import('../../server');
|
||||||
const expressApp = await createExpressApp();
|
const expressApp = await createExpressApp();
|
||||||
|
|
||||||
|
// In production Electron, serve the built renderer files
|
||||||
|
if (!process.env.NODE_ENV || process.env.NODE_ENV !== 'development') {
|
||||||
|
const { default: express } = await import('express');
|
||||||
|
// electron-vite builds renderer to out/renderer/
|
||||||
|
const rendererPath = app.isPackaged
|
||||||
|
? path.join(process.resourcesPath, 'renderer')
|
||||||
|
: path.join(__dirname, '..', '..', 'out', 'renderer');
|
||||||
|
|
||||||
|
if (fs.existsSync(rendererPath)) {
|
||||||
|
expressApp.use(express.static(rendererPath));
|
||||||
|
// SPA fallback — serve index.html for all non-API routes
|
||||||
|
expressApp.get('*', (_req: any, res: any) => {
|
||||||
|
res.sendFile(path.join(rendererPath, 'index.html'));
|
||||||
|
});
|
||||||
|
console.log('📦 Serving renderer from:', rendererPath);
|
||||||
|
} else {
|
||||||
|
console.warn('⚠️ Renderer build not found at:', rendererPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
const server = expressApp.listen(EXPRESS_PORT, '127.0.0.1', () => {
|
const server = expressApp.listen(EXPRESS_PORT, '127.0.0.1', () => {
|
||||||
console.log(`🚀 Express server on http://127.0.0.1:${EXPRESS_PORT}`);
|
console.log(`🚀 Express server on http://127.0.0.1:${EXPRESS_PORT}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user