mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-16 10:42:50 +01:00
c06a2d2cef
This ports TGUI, and makes the old nano crew monitor and the disposal bins use it as first examples.
55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
import { createLogger } from 'common/logging.js';
|
|
import fs from 'fs';
|
|
import { createRequire } from 'module';
|
|
import { promisify } from 'util';
|
|
import webpack from 'webpack';
|
|
import { broadcastMessage, loadSourceMaps, setupLink } from './link/server.js';
|
|
import { reloadByondCache } from './reloader.js';
|
|
import { resolveGlob } from './util.js';
|
|
|
|
const logger = createLogger('webpack');
|
|
|
|
export const getWebpackConfig = async options => {
|
|
const require = createRequire(import.meta.url);
|
|
const createConfig = await require('../tgui/webpack.config.js');
|
|
return createConfig({}, options);
|
|
};
|
|
|
|
export const setupWebpack = async config => {
|
|
logger.log('setting up');
|
|
const bundleDir = config.output.path;
|
|
// Setup link
|
|
const link = setupLink();
|
|
// Instantiate the compiler
|
|
const compiler = webpack(config);
|
|
// Clear garbage before compiling
|
|
compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => {
|
|
const files = await resolveGlob(bundleDir, './*.hot-update.*');
|
|
logger.log(`clearing garbage (${files.length} files)`);
|
|
for (let file of files) {
|
|
await promisify(fs.unlink)(file);
|
|
}
|
|
logger.log('compiling');
|
|
});
|
|
// Start reloading when it's finished
|
|
compiler.hooks.done.tap('tgui-dev-server', async stats => {
|
|
// Load source maps
|
|
await loadSourceMaps(bundleDir);
|
|
// Reload cache
|
|
await reloadByondCache(bundleDir);
|
|
// Notify all clients that update has happened
|
|
broadcastMessage(link, {
|
|
type: 'hotUpdate',
|
|
});
|
|
});
|
|
// Start watching
|
|
logger.log('watching for changes');
|
|
compiler.watch({}, (err, stats) => {
|
|
if (err) {
|
|
logger.error('compilation error', err);
|
|
return;
|
|
}
|
|
logger.log(stats.toString(config.devServer.stats));
|
|
});
|
|
};
|