当前位置: 首页 > 后端技术 > Node.js

节点管理子文件夹js文件执行

时间:2023-04-03 21:09:45 Node.js

运行node服务,使用child_process控制子文件夹js文件执行文件架构:index.js主程序入口fileHelper.js文件夹遍历readjson->main.js子文件夹执行文件入口package.json{"name":"nodelearn","version":"1.0.0","description":"","main":"src/index.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"keywords":[],"author":"","license":"ISC"}index.jsconst{spawn}=require("child_process");constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});const{loopFileSync}=require("./fileHelper");constentryFileName="main.js";conststratys=[];//要执行的方法letaheadMessages=[];//通用执行//获取所有可执行文件constfiles=loopFileSync(__dirname);files.forEach(item=>{const{fileName,fileDir,fileStat}=项目;if(fileName===entryFileName){让fileDirSplit=fileDir.split("\\");如果(fileDirSplit.length<2)返回;stratys.push([fileDirSplit[fileDirSplit.length-2],fileDir,fileStat]);}})//进入用户选择函数执行(cb){console.clear();让showMessage="";提前消息=[];showMessage+="请选择你的选择。\n";aheadMessages.push("0、退出\n");aheadMessages.push("1、运行最新修改\n");aheadMessages.push("2、运行最新创建\n");aheadMessages.push("3、全部运行\n");showMessage+=aheadMessages.join("");stratys.forEach((item,index)=>{showMessage+=`${index+aheadMessages.length}、${item[0]}\n`;})rl.question(showMessage,function(answer){cb(answer,()=>{rl.question("按回车键继续!",function(){execu化(cb);})});})}functioncreateNodeExecPromiseFactory(processName,jsFile){returnnewPromise((resolve)=>{letdata='';letspawnObj=spawn("node",[jsFile],{'shell':true});spawnObj.stdout.on("data",(chunk)=>{data+=chunk.toString();})spawnObj.on("exit",()=>{console.log(`${newDate().toLocaleString()}-----开始执行任务:${processName}`);console.log(data);console.log(`${newDate().toLocaleString()}-----执行任务${processName}已完成`);resolve();})})}functionhandleExecution(choose,next){letchooseNum=Number(choose);if(isNaN(chooseNum)||chooseNum<0||chooseNum>(stratys.length+aheadMessages.length-1)){console.warn("选择错误,请重新选择!");下一个();返回;}如果(chooseNum==0){控制台。日志(“退出!”);rl.close();进程.退出(0);}console.clear();让newStratys=[],promises=[];switch(chooseNum){case1://按修改时间排序,执行最新的修改newStratys=stratys.slice().sort((a,b)=>{returnb[2].mtimeMs-a[2].mtimeMs;})promises.push(createNodeExecPromiseFactory(newStratys[0][0],newStratys[0][1]));休息;case2://按创建时间排序,执行最新的创建newStratys=stratys.slice().sort((a,b)=>{returnb[2].ctimeMs-a[2].ctimeMs;})promises.push(createNodeExecPromiseFactory(newStratys[0][0],newStratys[0][1]));休息;case3://executealltasksnewStratys=stratys;for(leti=0;i{console.log("执行所有任务完成!");next();})}execution(handleExecution);fileHelper.jsconstfs=require("fs");constpath=require("path");functionloopFile(filePath,cb){fs.readdirSync(filePath,function(err,files){if(err){console.warn(err)}else{files.forEach(function(filename){varfiledir=path.join(filePath,filename);fs.stat(filedir,function(eror,stats){if(eror){console.warn('获取文件stats丢失');}else{varisFile=stats.isFile();varisDir=stats.isDirectory();if(isFile){if(typeofcb==="function")cb(filename,filedir,fileStat);}if(isDir){loopFile(filedir,cb);}}})});}});}functionloopFileSync(filePath){常量结果=[];函数循环(文件路径){让文件=fs.readdirSync(文件路径);files.forEach(function(fileName){letfileDir=path.join(filePath,fileName);letfileStat=fs.statSync(fileDir);if(fileStat.isFile()){result.push({fileDir,fileName,fileStat});}elseif(fileStat.isDirectory()){loop(fileDir);}});}循环(文件路径);returnresult;}exports.loopFile=loopFile;exports.loopFileSync=loopFileSync;运行效果