我需要一个接一个地执行一些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)
答案 0 :(得分:1)
由于js文件之间没有交互,因此我仅使用批处理脚本按以下顺序依次运行所有文件
for /R %%f in (*.js) do if not %%f==%~dpnx0 node "%%f"
答案 1 :(得分:0)
答案 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'
});
}