compile.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { AdminUiExtension } from '@vendure/common/lib/shared-types';
  2. import { spawn } from 'child_process';
  3. import * as path from 'path';
  4. import {
  5. copyExtensionModules,
  6. createExtensionsModules,
  7. deleteExistingExtensionModules,
  8. isInVendureMonorepo,
  9. restoreOriginalExtensionsModule,
  10. } from './common';
  11. /**
  12. * Builds the admin-ui app using the Angular CLI `ng build --prod` command.
  13. */
  14. export function compileAdminUiApp(outputPath: string, extensions: Array<Required<AdminUiExtension>>) {
  15. const cwd = path.join(__dirname, '..');
  16. const relativeOutputPath = path.relative(cwd, outputPath);
  17. return new Promise((resolve, reject) => {
  18. restoreOriginalExtensionsModule();
  19. deleteExistingExtensionModules();
  20. copyExtensionModules(extensions);
  21. createExtensionsModules(extensions);
  22. const config = isInVendureMonorepo() ? 'plugin-dev' : 'plugin';
  23. const buildProcess = spawn(
  24. 'yarn',
  25. ['ng', 'build', `-c=${config}`, `--outputPath=${relativeOutputPath}`],
  26. {
  27. cwd,
  28. shell: true,
  29. stdio: 'inherit',
  30. },
  31. );
  32. buildProcess.on('close', code => {
  33. if (code === 0) {
  34. resolve();
  35. } else {
  36. reject(code);
  37. }
  38. });
  39. buildProcess.on('error', err => {
  40. reject(err);
  41. });
  42. }).finally(() => {
  43. restoreOriginalExtensionsModule();
  44. });
  45. }