frontend/seed/scripts/build.js
2025-05-14 21:49:03 +02:00

111 lines
3.0 KiB
JavaScript

const webpack = require('webpack');
const rimraf = require('rimraf');
const { choosePort } = require('react-dev-utils/WebpackDevServerUtils');
const clientConfigBuilder = require('../config/webpack/ssr/client.js');
const serverConfigBuilder = require('../config/webpack/ssr/server.js');
const paths = require('../config/paths');
const { logMessage, compilerPromise, sleep } = require('./utils');
const args = process.argv.slice(2);
// const generateStaticHTML = async () => {
// const nodemon = require('nodemon');
// const fs = require('fs');
// const puppeteer = require('puppeteer');
// const port = await choosePort('localhost', 8505);
// process.env.PORT = port;
// const script = nodemon({
// script: `${paths.serverBuild}/server.js`,
// ignore: ['*'],
// });
// script.on('start', async () => {
// try {
// await sleep(2000);
// const browser = await puppeteer.launch();
// const page = await browser.newPage();
// await page.goto(`http://localhost:${port}`);
// const pageContent = await page.content();
// fs.writeFileSync(`${paths.clientBuild}/index.html`, pageContent);
// await browser.close();
// script.emit('quit');
// } catch (err) {
// script.emit('quit');
// console.log(err);
// }
// });
// script.on('exit', code => {
// process.exit(code);
// });
// script.on('crash', () => {
// process.exit(1);
// });
// };
const build = async () => {
rimraf.sync(paths.clientBuild);
rimraf.sync(paths.serverBuild);
let generateStatic = false;
let staging = false;
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (arg === 'static' || arg === '-static') generateStatic = true;
if (arg === 'staging' || arg === '-staging') staging = true;
}
const clientConfig = clientConfigBuilder({
prod: true,
staging,
});
const serverConfig = serverConfigBuilder({
prod: true,
staging,
});
// Combine (as for dev)
const multiCompiler = webpack([clientConfig, serverConfig]);
const clientCompiler = multiCompiler.compilers.find(compiler => compiler.name === 'client');
const serverCompiler = multiCompiler.compilers.find(compiler => compiler.name === 'server');
const clientPromise = compilerPromise('client', clientCompiler);
const serverPromise = compilerPromise('server', serverCompiler);
serverCompiler.watch({}, (error, stats) => {
if (!error && !stats.hasErrors()) {
console.log(stats.toString(serverConfig.stats));
}
});
clientCompiler.watch({}, (error, stats) => {
if (!error && !stats.hasErrors()) {
console.log(stats.toString(clientConfig.stats));
}
});
// wait until client and server is compiled
try {
await serverPromise;
await clientPromise;
// not very necessary
if (generateStatic) {
// await generateStaticHTML();
}
logMessage('Done!', 'info');
process.exit();
} catch (error) {
logMessage(error, 'error');
}
};
build();