Q21 · 工程工具

你有开发过自己的脚手架吗?解决了什么问题?

脚手架CLI工程规范

⚡ 速记答案(30 秒)

  • 脚手架核心能力:初始化模板 + 统一工程规范 + 内置最佳实践
  • 解决:不同项目的目录结构、依赖、配置不统一;新同学搭项目慢
  • 一般基于 commander/inquirer 等做交互,下载模板(Git/本地)后执行依赖安装
  • 可以内置:CI 模板、环境变量规范、发布流程脚本

📖 详细讲解

脚手架设计


核心功能


1. 交互式问答(inquirer)
2. 模板下载/生成
3. 依赖安装
4. 初始化脚本执行

技术栈


作用
commander命令行参数解析
inquirer交互式问答
download-git-repo下载模板
oraloading 动画
chalk彩色输出

目录结构


my-cli/
├── bin/
│   └── cli.js
├── lib/
│   ├── create.js
│   └── templates/
└── package.json

💻 代码示例

简易脚手架示例
#!/usr/bin/env node
const { program } = require('commander');
const inquirer = require('inquirer');
const { execSync } = require('child_process');

program
  .command('create <project-name>')
  .description('创建新项目')
  .action(async (name) => {
    const answers = await inquirer.prompt([
      {
        type: 'list',
        name: 'template',
        message: '选择项目模板',
        choices: ['vue3', 'react', 'node'],
      },
    ]);
    
    console.log(`创建 ${name} 项目,使用 ${answers.template} 模板`);
    
    execSync(`git clone template-repo ${name}`);
    execSync(`cd ${name} && npm install`);
    
    console.log('项目创建成功!');
  });

program.parse();
💡
面试技巧:回答工程化问题时,结合你实际项目中的配置和优化经验,更有说服力。