使用控制台日志顺序运行所有js文件

时间:2019-03-26 21:58:31

标签: node.js

我需要一个接一个地执行一些js文件,这些js文件正在console.log中打印重要信息。

我目前正在尝试使用以下代码,但未显示sub js文件的console.log。

我如何才能使用这种方法?

const fs = require('fs')
const exec = require('child_process').exec
const async = require('async') // npm install async
const path = require('path');


const scriptsFolder = path.resolve("./") + "\\" named scripts


const files = fs.readdirSync(scriptsFolder) 

const targetFiles = files.filter(function (file) {
    return path.extname(file).toLowerCase() === '.js';
});

const funcs = targetFiles.map(function (file) {
    return exec.bind(null, `node ${scriptsFolder}${file}`)

})

function getResults(err, data) {

    if (err) {
        return console.log(err)
    }
    const results = data.map(function (lines) {
        return lines.join('') 
    })
    console.log(results)
}

  async.series(funcs, getResults)

3 个答案:

答案 0 :(得分:1)

由于js文件之间没有交互,因此我仅使用批处理脚本按以下顺序依次运行所有文件

for /R %%f in (*.js) do if not %%f==%~dpnx0 node "%%f"

答案 1 :(得分:0)

为什么要在单独的过程中执行每个js文件?

尝试一个接一个地要求文件,没有child_process

请选中此answer,以获取文件夹动态需求的绝佳示例。

答案 2 :(得分:0)

您可以考虑使用execSync运行脚本,并使用stdio: "inherit"选项将每个脚本的输出定向到父进程:

const files = fs.readdirSync(scriptsFolder)

const targetFiles = files.filter(function (file) {
    return path.extname(file).toLowerCase() === '.js';
});

for (let file of targetFiles) {
    execSync(`node ${scriptsFolder}/${file}`, {
        stdio: 'inherit'
    });
}