bia
Version:
a tool for download git repository
86 lines (77 loc) • 2.31 kB
JavaScript
/*
* @Author: hzxulin@yeah.net
* @Date: 2018-11-20 20:26:36
* @Last Modified by: hzxulin@yeah.net
* @Last Modified time: 2019-06-01 17:48:36
*/
const path = require('path')
const execa = require('execa')
const ora = require('ora')
const fse = require('fs-extra')
const figlet = require('figlet')
const colors = require('colors')
/**
* clone远程git项目,去除.git文件
* @param {string} repo git的源地址
* @param {string} branch 分支名称
* @param {string} text 提示文案
*/
const cloneGit = (repo, branch, text) => {
text = text || '项目初始化中...'
return new Promise((resolve, reject) => {
const spinner = ora(`== ${text} ==`)
const tplTemp = path.resolve(process.env.HOME, '.web-init-templates', repo.replace(/\/|:/g, '-'))
spinner.start()
fse.emptyDirSync(tplTemp)
let cmd = `git clone ${branch ? `-b ${branch}` : ''} ${repo} ${tplTemp}`
execa.shell(cmd).then(() => {
fse.removeSync(path.resolve(tplTemp, '.git'))
spinner.stop()
resolve(tplTemp)
}).catch(err => {
spinner.stop()
console.log('== 初始化异常,停止进程 ==')
reject(err)
})
})
}
/**
* 移动文件
* @param {string} file 文件名称
* @param {string} src 源路径
* @param {string} dist 目标路径
*/
const moveFiles = (file, src, dist) => {
return new Promise((resolve, reject) => {
const srcFolder = file ? path.resolve(src, file) : src
const distFolder = file ? path.resolve(dist, file) : dist
try {
fse.copySync(srcFolder, distFolder)
resolve()
} catch (err) {
reject(err)
}
})
}
/**
* 成功打印logo
* @param {function} cb 回调函数cb
* @param {boolean} exitFlag 结束标志
*/
const showSuccess = (cb, exitFlag) => {
figlet('^ Bia >>>', (err, data) => {
if (err) throw err
console.log(colors.green(`\n${data}`))
if (Object.prototype.toString.call(cb) === '[object Function]') {
cb()
} else {
console.log(colors.green('== Bia success. =='))
}
if (exitFlag) process.exit()
})
}
module.exports = {
cloneGit,
moveFiles,
showSuccess,
}