scratch-desktop/scripts/start.js
2025-04-10 13:41:28 +03:00

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();