You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.3 KiB
182 lines
4.3 KiB
'use strict';
|
|
|
|
const requireContext = require('require-context');
|
|
const fs = require('fs');
|
|
|
|
class FileHepler {
|
|
checkVarType(obj) {
|
|
let toString = Object.prototype.toString;
|
|
let map = {
|
|
'[object Boolean]': 'boolean',
|
|
'[object Number]': 'number',
|
|
'[object String]': 'string',
|
|
'[object Function]': 'function',
|
|
'[object Array]': 'array',
|
|
'[object Date]': 'date',
|
|
'[object RegExp]': 'regExp',
|
|
'[object Undefined]': 'undefined',
|
|
'[object Null]': 'null',
|
|
'[object Object]': 'object'
|
|
}
|
|
|
|
return map[toString.call(obj)];
|
|
}
|
|
|
|
inArray(sourceArray = [], findArray = []) {
|
|
if (this.checkVarType(sourceArray) === 'array' && this.checkVarType(findArray) === 'array') {
|
|
let sourceArraylen = sourceArray.length;
|
|
let find = JSON.parse(JSON.stringify(findArray));
|
|
let temp = [];
|
|
for (let i = 0; i < sourceArraylen; i++) {
|
|
let sourceVal = sourceArray[i];
|
|
for (let k = 0; k < find.length; k++) {
|
|
if (find[k] === sourceVal) {
|
|
temp.push(true);
|
|
find.splice(k, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return findArray.length === temp.length;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
getDirFiles(directory, fileType = [], ignoreFileName = []) {
|
|
/**
|
|
* @description
|
|
* @type {RegExp}
|
|
*/
|
|
let reg = new RegExp(`\.(${fileType.join('|')})$`);
|
|
let regFile = new RegExp(`^(.*)\.(${fileType.join('|')})$`);
|
|
let modulesFiles = requireContext(directory, true, reg);
|
|
let modules = modulesFiles.keys().reduce((modules, modulePath) => {
|
|
const moduleName = modulePath.replace(regFile, '$1');
|
|
const extName = modulePath.replace(regFile, '$2');
|
|
const moduleNameArr = moduleName.split('/');
|
|
modules[moduleName] = {
|
|
path: moduleName,
|
|
fileName: moduleNameArr[moduleNameArr.length - 1],
|
|
ext: extName,
|
|
fullName: `${moduleName}.${extName}`
|
|
};
|
|
return modules;
|
|
}, {});
|
|
|
|
//过滤忽略文件
|
|
let temp = {};
|
|
Object.keys(modules).map((key) => {
|
|
let item = modules[key];
|
|
if (!this.inArray(ignoreFileName, [item['fileName']])) {
|
|
temp[key] = modules[key];
|
|
}
|
|
});
|
|
return temp;
|
|
|
|
}
|
|
|
|
/***
|
|
* @description 复制文件到新位置
|
|
* @param currentFilePath
|
|
* @param targetFliePath
|
|
*/
|
|
copyFile(currentFilePath, targetFliePath) {
|
|
return new Promise((resolve,reject)=>{
|
|
if (!fs.existsSync(currentFilePath)) {
|
|
reject(`复制文件路径不存在:${currentFilePath}`);
|
|
}
|
|
let readStream = fs.createReadStream(currentFilePath);
|
|
readStream.once('error', (err) => {
|
|
reject(err);
|
|
});
|
|
readStream.once('end', () => {
|
|
resolve();
|
|
});
|
|
readStream.pipe(fs.createWriteStream(targetFliePath));
|
|
})
|
|
}
|
|
|
|
/***
|
|
* @description 删除文件
|
|
* @param FilePath
|
|
* @returns {Promise<unknown>}
|
|
*/
|
|
removeFile(FilePath){
|
|
return new Promise((resolve, reject)=>{
|
|
fs.unlink(FilePath, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve('ok');
|
|
});
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @description 修改文件名字
|
|
* @param FilePath
|
|
* @param newPath
|
|
* @returns {Promise<unknown>}
|
|
*/
|
|
renameFile(FilePath,newPath){
|
|
return new Promise((resolve, reject) => {
|
|
fs.rename(FilePath, newPath ,(err) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve('ok');
|
|
});
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @description 判断文件是否存在
|
|
* @param FilePath
|
|
* @returns {Promise<unknown>}
|
|
*/
|
|
existFile(FilePath){
|
|
return new Promise((resolve, reject) => {
|
|
fs.access(FilePath, fs.constants.F_OK, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve('ok');
|
|
});
|
|
})
|
|
}
|
|
|
|
readFile(FilePath){
|
|
return new Promise((resolve, reject) => {
|
|
fs.readFile(FilePath,(err, data) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve(String(data));
|
|
});
|
|
});
|
|
}
|
|
|
|
writeFile(FilePath,data){
|
|
return new Promise((resolve, reject) => {
|
|
fs.writeFile(FilePath, data, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve('ok');
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
}
|
|
|
|
module.exports = new FileHepler();
|
|
|
|
|
|
|