mirror of
https://github.com/scratchfoundation/scratch-desktop.git
synced 2025-07-13 13:24:14 -04:00
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
const {spawn} = require('child_process');
|
|
const webpack = require('webpack');
|
|
const WebpackDevServer = require('webpack-dev-server');
|
|
const chalk = require('chalk');
|
|
const waitOn = require('wait-on');
|
|
|
|
const rendererConfig = require('../webpack.renderer.js');
|
|
|
|
const PORT = process.env.PORT || 8601;
|
|
|
|
const buildRenderer = () => new Promise((resolve, reject) => {
|
|
console.log(chalk.cyan('Building renderer process...'));
|
|
|
|
const compiler = webpack(rendererConfig);
|
|
compiler.run((err, stats) => {
|
|
if (err || stats.hasErrors()) {
|
|
console.error(chalk.red('Renderer build failed:', err || stats.toString()));
|
|
reject(err || new Error('Renderer build failed.'));
|
|
} else {
|
|
console.log(chalk.green('Renderer built successfully!'));
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
|
|
const startRenderer = async () => {
|
|
console.log(chalk.cyan('Starting Webpack Dev Server...'));
|
|
|
|
const compiler = webpack(rendererConfig);
|
|
const server = new WebpackDevServer(
|
|
{
|
|
hot: true,
|
|
compress: true,
|
|
port: PORT,
|
|
headers: {'Access-Control-Allow-Origin': '*'},
|
|
historyApiFallback: true
|
|
},
|
|
compiler
|
|
);
|
|
|
|
try {
|
|
await server.start();
|
|
console.log(chalk.green(`Renderer is running at http://localhost:${PORT}`));
|
|
} catch (err) {
|
|
console.error(chalk.red('Failed to start Webpack Dev Server:', err));
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const startElectron = async () => {
|
|
console.log(chalk.cyan('Starting Electron...'));
|
|
|
|
await waitOn({resources: [`http://localhost:${PORT}`]});
|
|
|
|
spawn('electron', ['.'], {
|
|
stdio: 'inherit',
|
|
shell: true
|
|
});
|
|
};
|
|
|
|
const start = () => {
|
|
console.log(chalk.green('Building main process...'));
|
|
|
|
const mainProcess = spawn('npm', ['run', 'compile:main'], {
|
|
stdio: 'inherit',
|
|
shell: true
|
|
});
|
|
|
|
mainProcess.on('exit', async code => {
|
|
if (code === 0) {
|
|
console.log(chalk.green('Main process built successfully!'));
|
|
|
|
await buildRenderer();
|
|
await startRenderer();
|
|
await startElectron();
|
|
} else {
|
|
console.log(chalk.red('Main process build failed!'));
|
|
process.exit(1);
|
|
}
|
|
});
|
|
};
|
|
|
|
start();
|