从零实现一个CLI脚手架工具
James Park | 2026-08-21T12:51:00 | JavaScript, DevOps
用Commander+Inquirer+Ora从零实现一个项目脚手架CLI,支持模板选择和自动初始化
# 从零实现一个CLI脚手架工具 团队每次新建项目都要手动copy模板改配置,太麻烦了。花了一天写了个脚手架CLI,`my-cli create project-name`一条命令搞定。 ## 核心依赖 ```json { "dependencies": { "commander": "^11.0.0", "inquirer": "^8.0.0", "ora": "^5.4.1", "chalk": "^4.1.2", "download-git-repo": "^3.0.2" } } ``` ## 主入口 ```javascript #!/usr/bin/env node var program = require('commander'); var inquirer = require('inquirer'); var ora = require('ora'); var chalk = require('chalk'); var download = require('download-git-repo'); var path = require('path'); program .command('create ') .description('创建新项目') .action(function(name) { // 交互式选择模板 inquirer.prompt([ { type: 'list', name: 'template', message: '选择项目模板:', choices: [ { name: 'Vue3 + Vite + TS', value: 'vue3-template' }, { name: 'React + Next.js', value: 'nextjs-template' }, { name: 'Node.js + Express', value: 'express-template' } ] }, { type: 'confirm', name: 'useESLint', message: '是否启用ESLint?', default: true } ]).then(function(answers) { var spinner = ora('正在下载模板...').start(); var repo = 'github:my-org/' + answers.template; download(repo, name, function(err) { if (err) { spinner.fail('下载失败:' + err.message); } else { spinner.succeed('项目创建成功!'); console.log(chalk.green(' cd ' + name)); console.log(chalk.green(' npm install')); } }); }); }); program.parse(process.argv); ``` 最后`npm link`注册为全局命令,团队都能用了。后续还可以加模板变量替换、自动git init等功能。