为什么我们需要一套脚手架,它能帮助我们解决哪些痛点问题。
前端项目越来越多,来回下载繁琐、耗时,重复无意义的工作,不方便管理,所以创建一个自己的脚手架非常有必要。
我们可以把远程仓库的项目通过指令来下载项目,没必要再来回下载项目,而且在远程仓库中更方便管理。
- 首先我们下载所需依赖
"dependencies": {
"commander": "^11.0.0",
"download-git-repo": "^3.0.2",
"inquirer": "^8.2.5",
"ora": "^5.4.1"
}
- 在pacckage.json配置bin指令
这个指令是前缀命令,例如 npm 这样的前缀
"bin": {
"pear-cli":"./bin/index.js"
},
- 创建目录bin下index.js
- 编写代码 首先引入依赖
// 创建命令行指令
const program = require('commander')
// 获取json文件获取版本
const package = require('../package.json');
// 创建命令行交互,提供用户交互收集用户信息
const inquirer = require('inquirer');
// 可以从远程拉取git仓库
const download = require('download-git-repo');
// 创建命令行加载动画
const ora = require('ora')
// 路径
const path = require('path');
- 创建查看版本指令
提供输入 pear-cli --version 输出版本
//提供输入 pear-cli --version 输出版本
program.version(`@cime/cli v${package.version}`)
- 创建所需全局变量
模板可以创建多个
// 提供模板
const templates = [
{
// 模板名
name: "pear-admin-react",
// git下载地址
value: 'https://github.com:用户名/仓库名'
},
]
// loading 加载
const loading = ora('正在下载....')
- 创建指令获取输入项目名和选择模板下载对应项目
链式调用进行下一步操作
program.command('create')
.description('创建模版') // 设置命令描述
.action(async () => { // 异步处理函数
// 创建终端输入框
// 获取用户输入项目名
let { name } = await inquirer.prompt({
type: 'input', // list 列表选择 confirm 选择框
name: 'name', // 问题名称
message: '请输入项目名称:'
})
// 获取用户选择模板
let { template } = await inquirer.prompt({
type: "list", // 实现选择下载模板
name: 'template',
message: '请选择下载的项目:',
choices: templates
})
// 显示loading动画
loading.start();
// 项目下载地址
let dest = path.join(process.cwd(), name)
download(template, dest, (err) => {
// 关闭loading东海
loading.stop()
if (err) {
console.error('下载出错! Error:', err);
} else {
console.log('下载成功');
}
});
})
使用方法
- 将本地文件系统中的一个包链接到项目
- 现在就可以输入你的创建的指令查看版本下载项目了
输入指令查看版本 pear-cli --version
- 输入指令下载远程仓库中的项目
输入指令下载项目 pear-cli create 选择模板下载
这样我们就手写了一款属于自己的脚手架,方便我们管理使用自己的项目,中间编写代码时可以慢慢调试编写,还有一些依赖版本有兼容性,下载依赖时注意版本。