40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const esbuild = require('esbuild');
|
|
const { spawn } = require('child_process');
|
|
const pkg = require('./package.json');
|
|
|
|
const isDev = process.argv[2] !== 'build';
|
|
|
|
process.env.NODE_ENV = isDev ? 'development' : 'production';
|
|
|
|
let server;
|
|
const onRebuild = () => {
|
|
if (isDev) {
|
|
if (server) server.kill('SIGINT');
|
|
server = spawn('node', ['dist/index.js'], { stdio: [0, 1, 2] });
|
|
} else {
|
|
spawn('pnpm', ['next', 'build'], { stdio: [0, 1, 2] });
|
|
}
|
|
};
|
|
|
|
const included = ['express', 'pg', '@runtipi/postgres-migrations', 'connect-redis', 'express-session', 'drizzle-orm', '@runtipi/shared'];
|
|
const excluded = ['pg-native', '*required-server-files.json'];
|
|
const external = Object.keys(pkg.dependencies || {}).filter((dep) => !included.includes(dep));
|
|
external.push(...excluded);
|
|
|
|
esbuild
|
|
.build({
|
|
entryPoints: ['src/server/index.ts'],
|
|
external,
|
|
define: { 'process.env.NODE_ENV': `"${process.env.NODE_ENV}"` },
|
|
platform: 'node',
|
|
target: 'node18',
|
|
outfile: 'dist/index.js',
|
|
tsconfig: 'tsconfig.json',
|
|
bundle: true,
|
|
minify: true,
|
|
sourcemap: isDev,
|
|
watch: false,
|
|
})
|
|
.finally(onRebuild);
|