@yeepay/yeepay-cli
Version:
易宝前端脚手架
69 lines (64 loc) • 2.31 kB
JavaScript
import fs from 'fs';
import path from 'path';
export default class Utils {
constructor() { }
/**
* 创建一个新的目录
* @param {string} projectName - 要创建的目录名称
* @returns {void}
*/
mkdir(projectName) {
fs.mkdirSync(projectName);
}
/**
* 检查指定文件夹是否存在
* @param {string} folderName - 要检查的文件夹名称
* @returns {boolean} - 如果文件夹存在且是目录,则返回 true,否则返回 false
*/
checkFolderExists(folderName) {
const folderPath = this.getTargetDir(folderName); // 构建目标文件夹的路径
// 先检查路径是否存在,再检查路径是否是文件夹。
return fs.existsSync(folderPath) && fs.lstatSync(folderPath).isDirectory();
}
/**
* 获取目标目录
* @returns {string} - 目标目录的路径
*/
getTargetDir(folderName){
return path.join(process.cwd(),folderName)
}
/**
* 校验项目名是否合法
* @param {string} packageName - 要检查的包名
* @returns {boolean} - 如果包名合法返回 true,否则返回 false
*/
checkProjectName(packageName) {
if (!packageName) return false;
// 包名长度不能超过100个字符
if (packageName.length > 100) return false;
// 只允许小写字母和连字符,且不能以连字符开头或结尾
const regex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
return regex.test(packageName);
}
/**
* 检查网络连接状态
* @returns {Promise<boolean>} - 如果网络连接正常返回 true,否则返回 false
*/
async checkNetworkConnection() {
try {
// 创建一个超时 Promise
const timeout = new Promise((_, reject) => {
setTimeout(() => reject(new Error('请求超时')), 5000);
});
// 创建实际的网络请求 Promise
const networkCheck = fetch('https://www.baidu.com', {
mode: 'no-cors'
});
// 使用 Promise.race 竞争,谁先完成就用谁的结果
await Promise.race([networkCheck, timeout]);
return true;
} catch (error) {
return false;
}
}
}