创建工程
mkdir vue-auto-router-cli
cd vue-auto-router-cli
npm init -y
npm i commander download-git-repo ora handlebars figlet clear chalk open -s
# bin/kkb.js #指定脚本解释器为node #!/usr/bin/env node console.log('cli.....')
# package.json
"bin": {
"kkb": "./bin/kkb.js"
},
# 将npm 模块链接到对应的运行项目中去
npm link
# 删除的情况
ls /usr/local/bin/ rm /usr/local/bin/kkb
定制命令行界面
kkb.js文件
#!/usr/bin/env node
const program = require('commander')
program.version(require('../package').version)
program
.command('init <name>')
.description('init project')
.action(name => {
console.log('init ' + name)
})
program.parse(process.argv)
打印欢迎界面
/lib/init.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))
module.exports = async name => {
// 打印欢迎画面
clear()
const data = await figlet('KKB Welcome') log(data)
}
//bin/kkb.js
program
.command('init <name>')
.description('init project')
.action(require('../lib/init'))
克隆脚手架
/lib/download.js
const {promisify} = require('util')
module.exports.clone = async function(repo,desc) {
const download = promisify(require('download-git-repo'))
const ora = require('ora')
const process = ora(`下载.....${repo}`)
process.start()
await download(repo, desc)
process.succeed() }
/lib/init.js
const {clone} = require('./download')
module.exports.init = async name => {
//console.log('init ' + name)
log('🚀创建项目:' + name)
// 从github克隆项目到指定文件夹
await clone('github:su37josephxia/vue-template', name)
}
安装依赖
// promisiy化spawn
// 对接输出流
const spawn = async (...args) => {
const { spawn } = require('child_process');
return new Promise(resolve => {
}) }
const proc = spawn(...args)
proc.stdout.pipe(process.stdout)
proc.stderr.pipe(process.stderr)
proc.on('close', () => {
resolve()
})
module.exports.init = async name => {
// ....
log('安装依赖')
await spawn('cnpm', ['install'], { cwd: `./${name}` })
log(chalk.green(`
👌安装完成:
To get Start: ===========================
cd ${name}
npm run serve
===========================
`))
}
启动项目
const open = require("open")
module.exports.init = async name => {
// ...
// 打开浏览器
open(`http://localhost:8080`);
await spawn('npm', ['run', 'serve'], { cwd: `./${name}` })
}