/** * This script builds a production output of all of our bundles. */ import { logger } from '@spine/logger'; import { usesVendorDll, buildVendorDll, registerVendorDll, } from '../webpack/buildVendorDll'; import { webpackConfigFactory, getBundle } from '../webpack/configFactory'; import { BuildOptionsHookParams } from '../hooks/buildOptions'; import { config } from '@erect/core/config'; import { createServerlessHtmlPage } from '../webpack/createServerlessHtmlPage'; import { createServerlessConfig } from '../webpack/createServerlessConfig'; import { cliBuildHook } from '../hooks'; import { clean } from './clean.handler'; import { createBuildOptions } from '../webpack/createBuildOptions'; export const log = logger('erect:build'); export async function build(buildOptions: BuildOptionsHookParams) { const { target } = buildOptions; // First clear the build output dir. await clean(target); const bundleConfig = getBundle(target); const vendorDllEnabled = usesVendorDll(bundleConfig); if (vendorDllEnabled) { await buildVendorDll(buildOptions); } await new Promise((resolve, reject) => { const webpackFactory = webpackConfigFactory(createBuildOptions(buildOptions), log); if (vendorDllEnabled) { registerVendorDll(target, webpackFactory); } const compiler = webpackFactory.compile(); compiler.run((err, stats) => { if (err != null) { return reject(err); } if (stats.hasErrors()) { return reject(stats.compilation.errors[0]); } if (target === 'client') { return createServerlessHtmlPage() .then(() => createServerlessConfig()) .then(resolve); } resolve(); }); }); } cliBuildHook.addAction('default', async ({ target, optimize }) => { const targets = target == null ? [ 'client', 'server', ...Object.keys(config.additionalNodeBundles), ] : target; for (const target of targets) { await build({ target, optimize, }); } });