Q21 · 工程工具
你有开发过自己的脚手架吗?解决了什么问题?
⚡ 速记答案(30 秒)
- 脚手架核心能力:初始化模板 + 统一工程规范 + 内置最佳实践
- 解决:不同项目的目录结构、依赖、配置不统一;新同学搭项目慢
- 一般基于
commander/inquirer等做交互,下载模板(Git/本地)后执行依赖安装 - 可以内置:CI 模板、环境变量规范、发布流程脚本
📖 详细讲解
脚手架设计
核心功能
1. 交互式问答(inquirer)
2. 模板下载/生成
3. 依赖安装
4. 初始化脚本执行技术栈
| 库 | 作用 |
|---|---|
| commander | 命令行参数解析 |
| inquirer | 交互式问答 |
| download-git-repo | 下载模板 |
| ora | loading 动画 |
| 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();面试技巧:回答工程化问题时,结合你实际项目中的配置和优化经验,更有说服力。