Последовательно выполнить несколько файлов .js с терминала

#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);