前言

所谓脚手架,就是提前写好一些固定的文件模板,所以你需要先上传自己的模板到git仓库

配置文件config.js

这个里面可以写你所有项目模板

const projectList = {
    vueRouter: "https://github.com/ConsoleLZ/vue-router-cli.git"
};

module.exports = projectList;

主要逻辑index.js

#!/usr/bin/env node
const { program } = require("commander");
const chalk = require("chalk");
const figlet = require("figlet");
const inquirer = require("inquirer");
const fs = require("fs-extra");
const path = require("path");
const gitClone = require("git-clone");
const ora = require("ora");
// 项目列表
const projectList = require("./config.js")
const choices = []
for(let key in projectList){
  choices.push({
    name: key,
    value: key
  })
}
// 首行提示
program.name("lz-cli").usage("<command> [options]");

console.log(chalk.black.bgWhite.bold('🎉🎉 欢迎使用小哲的个人脚手架'));

// 添加命令
program
  .command("create <app-name>")
  .description("创建一个项目")
  .action(async appName => {
    const targetPath = path.join(process.cwd(), appName);
    if (fs.existsSync(targetPath)) {
      const answer = await inquirer.prompt([
        {
          message: "项目已存在,是否覆盖?",
          type: "confirm",
          name: "isOver",
          default: "false",
        },
      ]);
      if (answer.isOver) {
        fs.remove(targetPath);
        console.log(chalk.blue("移除成功"));
      } else {
        return;
      }
    }
    // 新建项目
    const result = await inquirer.prompt([
      {
        type: "list",
        message: "选择要创建的项目",
        default: "vueRouter",
        name: "framework",
        choices
      }
    ]);
    const key = result.framework
    const gitUrl = projectList[key];
    const spinner = ora("正在下载模板...").start();
    gitClone(gitUrl, appName, { checkout: "main" }, () => {
      spinner.succeed(chalk.blue.bold("项目创建成功"));
      console.log("");
      console.log(chalk.blue.bold(figlet.textSync("lz-cli", {})));
      console.log(chalk.blue("感谢您的使用!"));
    });
  });

// 版本号
program.version(`${require("../package.json").version}`);

// 监听 --help
program.on("--help", () => {
  console.log(chalk.green.bold(figlet.textSync("lz-cli", {})));
});

program.parse(program.argv);

package.json文件

{
  "name": "love-lz-cli",
  "version": "0.0.6",
  "description": "小哲的个人脚手架",
  "main": "index.js",
  "bin": {
    "lz-cli": "./bin/index.js"
  },
  "scripts": {
    "test": ""
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "chalk": "^4.0.0",
    "commander": "^12.1.0",
    "figlet": "^1.8.0",
    "fs-extra": "^11.2.0",
    "git-clone": "^0.2.0",
    "inquirer": "8.0.0",
    "ora": "5.0.0"
  }
}

完成

npm link

lz-cli现在就可以全局使用了

完整代码

请参考: https://github.com/ConsoleLZ/love-lz-cli