insomnia/packages/insomnia-app/esbuild.main.ts

68 lines
1.9 KiB
TypeScript
Raw Normal View History

import esbuild from 'esbuild';
import { builtinModules } from 'module';
import path from 'path';
import pkg from './package.json';
interface Options {
mode?: 'development' | 'production';
}
export default async function build(options: Options) {
const mode = options.mode || 'production';
// The list of packages that will be included in the node_modules folder of the packaged app.
// Exclude all package.json dependencies except from the ones in the packedDependencies list
const unpackedDependencies = [
...Object.keys(pkg.dependencies).filter(
name => !pkg.packedDependencies.includes(name)
),
];
const __DEV__ = mode !== 'production';
const PORT = pkg.dev['dev-server-port'];
const outdir = __DEV__
? path.join(__dirname, 'app')
: path.join(__dirname, 'build');
const env: Record<string, string> = __DEV__
? {
'process.env.APP_RENDER_URL': JSON.stringify(
`http://localhost:${PORT}/index.html`
),
'process.env.NODE_ENV': JSON.stringify('development'),
'process.env.INSOMNIA_ENV': JSON.stringify('development'),
'process.env.BUILD_DATE': JSON.stringify(new Date()),
}
: {
'process.env.NODE_ENV': JSON.stringify('production'),
'process.env.INSOMNIA_ENV': JSON.stringify('production'),
'process.env.BUILD_DATE': JSON.stringify(new Date()),
};
return esbuild.build({
entryPoints: ['./app/main.development.ts'],
outfile: path.join(outdir, 'main.min.js'),
bundle: true,
platform: 'node',
sourcemap: true,
format: 'cjs',
define: env,
external: [
'electron',
'@getinsomnia/node-libcurl',
...Object.keys(unpackedDependencies),
...Object.keys(builtinModules),
],
});
}
// Build if ran as a cli script
const isMain = require.main === module;
if (isMain) {
const mode =
process.env.NODE_ENV === 'development' ? 'development' : 'production';
build({ mode });
}