create-dage-backend-cli 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env node
  2. const { program } = require("commander");
  3. const fs = require("fs");
  4. const path = require("path");
  5. const { promisify } = require("util");
  6. const cliProgress = require("cli-progress");
  7. const ncp = promisify(require("ncp").ncp);
  8. const { exec } = require("child_process");
  9. const pkg = require("./package.json");
  10. program
  11. .version(pkg.version)
  12. .arguments("<projectName>")
  13. .action(async (projectName) => {
  14. const projectDir = path.join(process.cwd(), projectName);
  15. if (fs.existsSync(projectDir)) {
  16. console.log("当前目录下已存在" + projectName);
  17. return;
  18. }
  19. fs.mkdirSync(projectDir);
  20. const templateDir = path.join(__dirname, "template");
  21. const exclusions = ["node_modules", "pnpm-lock.yaml"];
  22. const files = await promisify(fs.readdir)(templateDir);
  23. const progressBar = new cliProgress.SingleBar({
  24. format: "Progress [{bar}] {percentage}% | {value}/{total}",
  25. barCompleteChar: "\u001b[42m \u001b[0m",
  26. barIncompleteChar: "\u001b[40m \u001b[0m",
  27. hideCursor: true,
  28. });
  29. progressBar.start(files.length, 0);
  30. for (const file of files) {
  31. if (!exclusions.includes(file)) {
  32. const srcPath = path.join(templateDir, file);
  33. const destPath = path.join(projectDir, file);
  34. await ncp(srcPath, destPath);
  35. if (file === "package.json") {
  36. const packageJsonPath = path.join(destPath);
  37. const packageJson = JSON.parse(
  38. fs.readFileSync(packageJsonPath, "utf8")
  39. );
  40. packageJson.name = projectName;
  41. packageJson.version = pkg.version;
  42. fs.writeFileSync(
  43. packageJsonPath,
  44. JSON.stringify(packageJson, null, 2)
  45. );
  46. }
  47. }
  48. progressBar.increment();
  49. }
  50. progressBar.stop();
  51. console.log("=====执行初始化=====");
  52. const installCommand =
  53. "pnpm i --registry http://192.168.20.245:4873/ || yarn --registry http://192.168.20.245:4873/ || npm i --registry http://192.168.20.245:4873/";
  54. try {
  55. await new Promise((resolve, reject) => {
  56. const childProcess = exec(
  57. installCommand,
  58. { cwd: projectDir },
  59. (error) => {
  60. if (error) {
  61. reject(error);
  62. } else {
  63. resolve();
  64. }
  65. }
  66. );
  67. childProcess.stdout.on("data", (data) => {
  68. console.log(data.trim());
  69. });
  70. });
  71. console.log("=====初始化完成=====");
  72. } catch (error) {
  73. console.error(`Error executing installation command: ${error.message}`);
  74. }
  75. });
  76. program.parse(process.argv);