#node.js #json #terminal
#node.js #json #Терминал
Вопрос:
У меня около 100 файлов JS, каждый из которых имеет свой сценарий.
file1.js , file2.js , file3.js , ... , file100.js
Прямо сейчас, чтобы выполнить каждый файл, я должен перейти к своему терминалу и сделать это:
node file1
node file2
node file3
.
.
node file100
Это означает, что я должен сделать это 100 раз в терминале. Есть ли сценарий для записи в JS-файл, чтобы я мог выполнить ТОЛЬКО ОДИН JS-файл, который последовательно выполнял бы все 100 JS-файлов?
Я также хочу дать 3 секунды ожидания между каждым выполнением, чего, я полагаю, я могу достичь с помощью следующего кода:
var interval = 3000;
var promise = Promise.resolve();
promise = promise.then(function () {
return new Promise(function (resolve) {
setTimeout(resolve, interval);
});
});
Есть предложения, как выполнить все 100 файлов JS, не набирая node file#
100 раз в терминале?
Комментарии:
1.Что вы пробовали до сих пор? Я имею в виду, что это не так сложно. Используйте fs.readdir для чтения всех файлов из каталога и выполнения каждого из них с помощью функции exec из модуля child_process readdir exec
2. @Molda Я понятия не имел, как подойти к этому, поэтому я еще ничего не смог попробовать (предупреждение noobie). Не знаком с fs.readdir ; спасибо за подсказку. Собираюсь прочитать об этом сейчас! Если вы можете поделиться любой строкой кодов, которые могут привести меня к решению, было бы здорово. Спасибо
Ответ №1:
вот скрипт, который это делает, вы также можете выбрать другой формат файла, а не
node file1
..
node filex
вы можете это сделать file1,file2,file3...filex
, также загляните в child_process перед использованием этого кода.
const { readFileSync } = require('fs');
const {exec} = require("child_process");
function executeEachFile(command){
exec(command, (error, stdout, stderr) => {
if(error){
console.log(error);
}
console.log("stdout: " stdout)
});
}
function readFile(path){
const output = readFileSync(path,"utf8").split("n").map(file=>{
return file.replace("r","");
});
console.log(output)
return output
};
function IntervalLoop(ArrayofFiles){
let counter = 0;
const interval = setInterval(()=>{
const commandName = "node " ArrayofFiles[counter];
console.log(commandName);
executeEachFile(commandName);
counter ;
console.log(counter);
if (ArrayofFiles.length == counter){
clearInterval(interval);
}
},300)
}
const fileNames = readFile("exec.txt");
IntervalLoop(fileNames);