penn-cli
Version:
快速生成cli项目的脚手架
105 lines (103 loc) • 3.93 kB
JavaScript
/*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