example-run.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const path = require("path");
  2. const exec = require("./lib/shell");
  3. const globby = require("globby");
  4. const rootDir = path.resolve(__dirname, "..");
  5. const examplesDir = path.join(rootDir, "example-projects");
  6. const givenProjName = process.argv[2];
  7. const runCmd = process.argv[3];
  8. ///////////////////////////////////////////////////////
  9. // Project Settings
  10. const redirectProjects = [["parcel", "parcel-2"]];
  11. const disabledProjects = ["next", "next-scheduler"];
  12. const pnpSimulatedProjects = ["angular"];
  13. ///////////////////////////////////////////////////////
  14. if (!givenProjName) {
  15. console.error('Must specify an example-project name, or "all"');
  16. process.exit(1);
  17. }
  18. if (!runCmd) {
  19. console.error("Must specify a run command");
  20. process.exit(1);
  21. }
  22. const projNames =
  23. givenProjName === "all"
  24. ? globby.sync("*", { cwd: examplesDir, onlyDirectories: true })
  25. : [givenProjName];
  26. projNames.forEach((projName) => {
  27. // Rewrite projName to redirect directory
  28. const redirect = redirectProjects.find(([val]) => val === projName);
  29. if (redirect) {
  30. console.info(`Redirecting '${redirect[0]}' to '${redirect[1]}' directory`);
  31. projName = redirect[1];
  32. }
  33. // Don't run disabled projects
  34. if (disabledProjects.includes(projName)) {
  35. console.info("This example is disabled till the next major release");
  36. process.exit();
  37. }
  38. const projDir = path.join(examplesDir, projName);
  39. console.log("");
  40. console.log("PROJECT:", projName);
  41. console.log(projDir);
  42. // Decide whether to simulate pnp or run normal yarn
  43. let execCmd = [runCmd];
  44. if (pnpSimulatedProjects.includes(projName)) {
  45. console.log("Using PnP simulation");
  46. execCmd = ["example:pnp", projName, runCmd];
  47. } else {
  48. console.log("Normal Yarn execution");
  49. }
  50. console.log();
  51. exec.sync(["yarn", "run", ...execCmd], {
  52. cwd: projDir,
  53. exitOnError: true,
  54. live: true,
  55. });
  56. console.log();
  57. });