1、创建项目npm init -y
2、安装包
“chalk”: “^4.1.0”,
“clear”: “^0.1.0”,
“commander”: “^7.1.0”,
“download-git-repo”: “^3.0.2”,
“figlet”: “^1.5.0”,
“handlebars”: “^4.7.7”,
“inquirer”: “^8.0.0”,
“open”: “^8.0.2”,
“ora”: “^5.4.0”
a、chalk 包的作用是修改控制台中字符串的样式,包括:
字体样式(加粗、隐藏等)
字体颜色
背景颜色
b、clear 清空控制台样式
c、使用commander插件来进行命令行工具的开发工作。Commander.js 是 一个帮助快速开发Nodejs命令行工具的package。
d、download-git-repo:在执行 node 时,需要从 github 下载源码。
e、figlet 打印欢迎页面
f、Handlebars 模板引擎,是一个语义化的模板,它看起来和 HTML 一样,只是嵌入了 handlebars 表达式。
g、inquirer 与用户命令交互、引导
h、ora 加载动画
在package.json
bin{
“vue”: “./bin/init.js”
}
#!/usr/bin/env node
const program = require('commander')
program.version(require('../package').version)
program
.command('init <name>')
.description('init project')
.action(require('../lib/index.js'))
program.parse(process.argv)
index.js
const {promisify} = require('util')
const figlet = promisify(require('figlet'))
const clear = require('clear')
const chalk = require('chalk')
const log = content => console.log(chalk.green(content))
const {clone} = require('./download')
module.exports = async name => {
//打印页面
clear()
const data = await figlet('kkb welcome')
log('🚀创建项目' + name)
await clone('direct:https://github.com/xxx',name)
}
download.js
const {promisify} = require('util')
module.exports.clone = async (repo,desc)=>{
const download = promisify(require('download-git-repo'))
const inquirer = require('inquirer')
const fs = require('fs')
const handlebars = require('handlebars')
const ora = require('ora')
const process = ora(`下载...${repo}`)
process.start()
await download(repo,desc,{clone: true}, err => {
console.log(err?'err':'success')
console.log(err)
process.succeed()
inquirer.prompt([{
type: 'input',
name: 'name',
message: '请输入项目名称'
},{
type: 'input',
name: 'description',
message: '请输入项目简介'
},{
type: 'input',
name: 'author',
message: '请输入作者名称'
}]).then((answers)=>{
console.log(answers)
const packagePath = `${desc}/package.json`
const packageContent = fs.readFileSync(packagePath,'utf8')
const packageResult = handlebars.compile(packageContent)(answers)
fs.writeFileSync(packagePath,packageResult)
console.log('成功')
})
})
}
这样一个简单的脚手架就可以了,但这个是要去把你的架构放在github上,从github上下载的。
后续写一个本地下载构建的脚手架,不需要github