Files
tunarr/server/scripts/bundle.ts
Christian Benincasa 5570631adc Packaging v0: Build and run server in a docker container (#139)
* This is a nightmare

* Checkpointing.... getting closer

* First cut - packaging the server in a docker container

* Remove busted bundles

* Minify build

* Some common commands for building - we're going to look into proper monorepo solutions soon

* Remove dependency on serve-static

* Add web serving, full-stack docker target, and Nvidia container support

* Remove test action graph for now
2024-03-05 13:13:26 -05:00

63 lines
1.6 KiB
TypeScript

import esbuild from 'esbuild';
import fg from 'fast-glob';
import fs from 'node:fs';
import { rimraf } from 'rimraf';
import { nativeNodeModulesPlugin } from '../esbuild/native-node-module.js';
import { nodeProtocolPlugin } from '../esbuild/node-protocol.js';
if (fs.existsSync('build')) {
console.log('Deleting old build...');
await rimraf('build');
}
fs.mkdirSync('build');
console.log('Copying images...');
fs.cpSync('src/resources/images', 'build/resources/images', {
recursive: true,
});
console.log('Bundling app...');
await esbuild.build({
entryPoints: ['src/index.ts'],
bundle: true,
// minify: true,
// We can't make this mjs yet because mikro-orm breaks
// when using cached metadata w/ not js/ts suffixes:
// https://github.com/mikro-orm/mikro-orm/blob/e005cc22ef4e247f9741bdcaf1af012337977b7e/packages/core/src/cache/GeneratedCacheAdapter.ts#L16
outfile: 'build/bundle.js',
format: 'esm',
platform: 'node',
target: 'node18',
inject: ['cjs-shim.ts'],
packages: 'external',
tsconfig: './tsconfig.build.json',
logLevel: 'verbose',
// external: [
// 'mysql',
// 'mysql2',
// 'sqlite3',
// 'pg',
// 'tedious',
// 'pg-query-stream',
// 'oracledb',
// 'assert',
// ],
mainFields: ['module', 'main'],
plugins: [nativeNodeModulesPlugin(), nodeProtocolPlugin()],
});
console.log('Bundling DB migrations...');
await esbuild.build({
entryPoints: await fg('src/migrations/*'),
outdir: 'build/migrations',
bundle: false,
packages: 'external',
tsconfig: './tsconfig.build.json',
});
fs.cpSync(
'src/migrations/.snapshot-db.db.json',
'build/migrations/.snapshot-db.db.json',
);