UNPKG

create-bfe-cttq

Version:

CTTQ大前端脚手架项目

92 lines (86 loc) 2.85 kB
const download = require("download-git-repo") const fs = require('fs-extra'); const ora = require("ora") const path = require("path") const spinner = ora("template downloading..."); /** * 模板下载 * @param {string} url 模板地址 参考--direct:https://gitlab.cttq.com/bfe-cli/cttq-template#vue2-pc-basic * @param {string} name 绝对路径或者相对路径 * @param {boolean} showInfo 是否提示下载信息 * @returns Promise */ const downloadTemplate = (url, name, showInfo = true) => { return new Promise((resolve, reject) => { showInfo && spinner.start() download(url, name, (err) => { if (err) { showInfo && spinner.fail("template download failed!!!"); reject(err); } else { showInfo && spinner.succeed("template download success!!!"); resolve(true); } }) }) } /** * 删除指定目录 * @param {string | Array<string>} targetDir 支持单个和多个目录 * @returns Promise */ const removeDirectory = (targetDir) => { return new Promise((resolve, reject) => { try { const target = Array.isArray(targetDir) ? targetDir : [targetDir]; for (let i = 0; i < target.length; i++) { fs.removeSync(target[i]) } resolve() } catch (error) { reject(error) } }) } /** * 多模板下载 * @param {Array<string>} repos 多个地址-数组 * @param {string} targetDir 目标目录 * @returns Promise */ const multipleDownload = (repos, targetDir) => { return new Promise(async (resolve, rejcet) => { spinner.start(); // 临时目录名 const tempDir = [] try { // 循环下载模板库 for (let i = 0; i < repos.length; i++) { // 存放临时目录 tempDir.push(fs.mkdtempSync(path.join(__dirname, 'temp-'))) // 获取下载结果 if (await downloadTemplate(repos[i], tempDir[i], false)) { // 读取文件目录 const files = fs.readdirSync(tempDir[i])[0]; // 复制文件到指定目录 fs.copySync(path.resolve(tempDir[i], files), path.resolve(targetDir, files)); // 清除临时目录 removeDirectory(tempDir[i]) } } // 提示模板下载成功 spinner.succeed("template download success!!!") // 结束 resolve(true) } catch (error) { spinner.stop("") removeDirectory(tempDir) rejcet(`File write failed: ${error}`) } }) } module.exports = { downloadTemplate, removeDirectory, multipleDownload }