flecks/packages/server/build/server.webpack.config.js

72 lines
1.8 KiB
JavaScript
Raw Normal View History

2024-01-31 15:57:11 -06:00
const {delimiter, join} = require('path');
2024-01-11 05:05:16 -06:00
2023-11-30 21:41:42 -06:00
const {
banner,
defaultConfig,
webpack,
2024-02-03 20:31:35 -06:00
} = require('@flecks/build/src/server');
2023-11-30 21:41:42 -06:00
const runtime = require('./runtime');
const startServer = require('./start');
2024-01-11 05:05:16 -06:00
const {
FLECKS_CORE_ROOT = process.cwd(),
} = process.env;
2023-11-30 21:41:42 -06:00
module.exports = async (env, argv, flecks) => {
const {
hot,
nodeArgs,
2024-01-20 03:40:20 -06:00
nodeEnv,
2023-11-30 21:41:42 -06:00
start: isStarting,
} = flecks.get('@flecks/server');
const config = defaultConfig(flecks, {
node: {
__dirname: false,
__filename: false,
},
output: {
libraryTarget: 'commonjs2',
2024-01-11 05:05:16 -06:00
path: join(FLECKS_CORE_ROOT, 'dist', 'server'),
2023-11-30 21:41:42 -06:00
},
plugins: [
banner({banner: "require('source-map-support').install();"}),
],
stats: {
...flecks.get('@flecks/server.stats'),
warningsFilter: [
/Failed to parse source map/,
],
},
target: 'node',
});
const isProduction = 'production' === argv.mode;
// Entrypoints.
config.entry.index = [];
if (!isProduction && hot) {
config.plugins.push(new webpack.HotModuleReplacementPlugin());
config.entry.index.push('webpack/hot/signal');
}
config.entry.index.push('@flecks/server/entry');
// Augment the application-starting configuration.
if (isStarting) {
config.plugins.push(
startServer({
2024-01-31 15:57:11 -06:00
env: {
...nodeEnv,
NODE_PATH: flecks.resolver.modules.join(delimiter),
NODE_PRESERVE_SYMLINKS: flecks.roots.some(([path, request]) => path !== request) ? 1 : 0,
},
2023-11-30 21:41:42 -06:00
exec: 'index.js',
// Bail hard on unhandled rejections and report.
nodeArgs: [...nodeArgs, '--unhandled-rejections=strict', '--trace-uncaught'],
// HMR.
signal: !!hot,
}),
);
}
// Build the server runtime.
await runtime(config, env, argv, flecks);
return config;
};