在另一个NodeJS进程中执行一个JS文件(包含日志等)

这是我的问题,我想创build一个自动运行testing的CLI。 没有CLI,我可以使用node命令完美运行一切:

node test.js 

基本上,我想和之前的命令完全一样,所以我search了一个这样的技术。 我find了这个:

 #!/usr/bin/env node 'use strict'; const options = process.argv; const { execFile } = require('child_process'); const child = execFile('node', ['../dist/test.js'], (error, stdout, stderr) => { if (error) { throw error; } console.log(stdout); }); 

这个方法对我不起作用,因为在test.js文件中,我使用的是ora包。 而且因为这个软件包正在制作实时animation,所以不会出现在stdout

有没有任何方式实时执行(没有子test.js )我的test.js使用节点? 我对其他方法是开放的,但是我想在NPM上发布CLI,所以请记住它必须在JavaScript中。

你可以在GitHub上find我所说的每个文件。 通常情况下,你不需要这个链接,但是如果你需要仔细观察,我会把它给你。

在您要求定义它的模块之后,您应该简单地从您的CLI代码中调用您的test()函数。 看一下mocha和jasmine:你会发现虽然这两个工具都提供了一个CLI,但他们还提供了从任意JS代码调用testing框架的指令。

没有一个子过程,我想不出一个办法。 但这可能有帮助。 subprocessexec将不会使用连续的输出命令,因为它会缓冲输出,当缓冲区已满时进程将停止。

合适的解决scheme是spwan :

 var spwan = require('child_process').spwan var child = spwan('node', ['../dist/test.js']) child.stdout.on('data', function(data) { console.log(data) }) child.stderr.on('data', function(data) { console.log(data) }) 

这里是我的解决scheme,你可以使用fs库来获取文件的代码,然后,你只需使用eval在同一个进程中执行。

 const fs = require("fs"); function run(file) { fs.readFile(file, (err, data) => { eval(data.toString('utf8')) }) }