if (err) console.log(err)
console.log('n')
console.log(chalk.green('Deleted successfully!n'))
console.log(chalk.grey('The latest template list is: n'))
console.log(tplObj)
console.log('n')
})
})
应该很好理解,就不过多解释了,我们直接执行
xr delete 看下效果:
xr-list
这个更简单了,两行代码搞定:
#!/usr/bin/env nodeconst tplObj = require(`${__dirname}/../template`)
console.log(tplObj)
是不是简单到爆:boom:。我们执行
xr list 看看效果:
因为刚才一添加一删除,所以目前没有模板,就输出
{}。xr-init
这应该是最主要(但不难)的一步了,毕竟我们写到现在还没有通过命令初始化过一个项目呢:sob:。所以这步的重点就是执行
download 方法,并传入相应参数,具体看代码:
#!/usr/bin/env nodeconst program = require('commander')
const chalk = require('chalk')
const ora = require('ora')
const download = require('download-git-repo')
const tplObj = require(`${__dirname}/../template`)
program
.usage('<template-name> [project-name]')
program.parse(process.argv)
// 当没有输入参数的时候给个提示
if (program.args.length < 1) return program.help()
// 好比 vue init webpack project-name 的命令一样,第一个参数是 webpack,第二个参数是 project-name
let templateName = program.args[0]let projectName = program.args[1]// 小小校验一下参数
if (!tplObj[templateName]) {
console.log(chalk.red('n Template does not exit! n '))
return
}
if (!projectName) {
console.log(chalk.red('n Project should not be empty! n '))
return
}
url = tplObj[templateName]
console.log(chalk.white('n Start generating... n'))
// 出现加载图标
const spinner = ora("Downloading...");
spinner.start();
// 执行下载方法并传入参数
download (
url,
projectName,
err => {
if (err) {
spinner.fail();
console.log(chalk.red(`Generation failed. ${err}`))
return
}
// 结束加载图标
spinner.succeed();
console.log(chalk.green('n Generation completed!'))
console.log('n To get started')
console.log(`n cd ${projectName} n`)
}
)
ok,我们执行一下
xr init simple test ,记得先执行一下
xr add










