esbuild.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/env node
  2. /* eslint-disable @typescript-eslint/no-var-requires */
  3. const esbuild = require('esbuild');
  4. const { spawn } = require('child_process');
  5. const pkg = require('./package.json');
  6. const isDev = process.argv[2] !== 'build';
  7. process.env.NODE_ENV = isDev ? 'development' : 'production';
  8. let server;
  9. const onRebuild = () => {
  10. if (isDev) {
  11. if (server) server.kill('SIGINT');
  12. server = spawn('node', ['dist/index.js'], { stdio: [0, 1, 2] });
  13. } else {
  14. spawn('pnpm', ['next', 'build'], { stdio: [0, 1, 2] });
  15. }
  16. };
  17. const included = ['express', 'pg', '@runtipi/postgres-migrations', 'connect-redis', 'express-session', 'drizzle-orm', '@runtipi/shared'];
  18. const excluded = ['pg-native', '*required-server-files.json'];
  19. const external = Object.keys(pkg.dependencies || {}).filter((dep) => !included.includes(dep));
  20. external.push(...excluded);
  21. esbuild
  22. .build({
  23. entryPoints: ['src/server/index.ts'],
  24. external,
  25. define: { 'process.env.NODE_ENV': `"${process.env.NODE_ENV}"` },
  26. platform: 'node',
  27. target: 'node18',
  28. outfile: 'dist/index.js',
  29. tsconfig: 'tsconfig.json',
  30. bundle: true,
  31. minify: true,
  32. sourcemap: isDev,
  33. watch: false,
  34. })
  35. .finally(onRebuild);