UNPKG

penn-cli

Version:

快速生成cli项目的脚手架

105 lines (103 loc) 3.93 kB
/*eslint-disable*/ const fs = require('fs') const chalk = require(`chalk`) const semver = require('semver') // node版本检测工具 const syncRequest = require('sync-request') // 请求库 const Log = console.log /* * 插件工具集 * */ const util = { deleteFolderAllNum: 0, // 检测更新版本 checkUpdateVersion(pkgName, currentVersion, npmUrl) { const res = syncRequest('GET', `${npmUrl}${pkgName}`) const data = res.getBody('utf8') ? JSON.parse(res.getBody('utf8')) : {} let latest = currentVersion let lastVersion = currentVersion if (res.statusCode === 200) { latest = data['dist-tags']['latest'] lastVersion = data['versions'][latest]['lastVersion'] } return { latest, lastVersion } }, // 检测node版本 checkNodeVersion(nodeVersion, repoNodeVersion) { const versionTrue = semver.satisfies(nodeVersion, repoNodeVersion) if (!versionTrue) { Log(chalk.red(` [node version ERROR]: 您当前系统的node版本为 ${nodeVersion},请升级! node.js版本必须满足 ${repoNodeVersion} 才能运行本工具! `)) } return versionTrue }, // 检测是否存在重复文件 hasFileName(flieName) { return fs.existsSync(flieName) }, // 数组删除所有指定项 arrayDelAllForKey(array, key) { const arrayStr = array.join() const newStr = arrayStr.replaceAll(`,${key}`, '') return newStr.split(',') }, // 移除目录中所有文件 _deleteFolder(dir, callback) { let files = [] if (fs.existsSync(dir)) { files = fs.readdirSync(dir) //返回文件和子目录的数组 files.forEach(function (file, index) { const curPath = dir + '/' + file if (fs.statSync(curPath).isDirectory()) { // //同步读取文件夹文件,如果是文件夹,则函数回调 return util._deleteFolder(curPath) } else { util.deleteFolderAllNum-- fs.unlinkSync(curPath) //是指定文件,则删除 } }) fs.rmdirSync(dir) } if (util.deleteFolderAllNum <= 0) { callback && callback(util.deleteFolderAllNum) } }, // 查找所有文件总数 _readFileAll(dir, list = []) { const files = fs.readdirSync(dir) //返回文件和子目录的数组 files.forEach(function (file) { const curPath = dir + '/' + file if (fs.statSync(curPath).isDirectory()) { // //同步读取文件夹文件,如果是文件夹,则函数回调 util._readFileAll(curPath, list) } else { list.push(file) } }) }, // 删除文件目录 deleteDir(ora, dir) { return new Promise((resolve, reject) => { let _Loading = null // 创建加载器 if (!dir) return // const len = util._readFileLen() // 获取文件总数 const fileList = [] util._readFileAll(dir, fileList) util.deleteFolderAllNum = fileList.length if (ora) _Loading = ora({ text: `正在删除本地重名目录...`, interval: 20, isEnabled: true }).start() // 开始状态 => 加载状态 util._deleteFolder(dir, function (num) { _Loading.succeed(chalk.greenBright(`======| 删除本地重名目录成功 |======`)) // 加载状态 => 成功状态 resolve(true) }) }) } } module.exports = util