Javascript 在另一个NodeJS进程内执行JS文件(包括日志等)

Javascript 在另一个NodeJS进程内执行JS文件(包括日志等),javascript,node.js,asynchronous,command-line-interface,Javascript,Node.js,Asynchronous,Command Line Interface,这是我的问题,我想创建一个自动运行测试的CLI。没有CLI,我可以使用node命令完美地运行一切: node test.js 基本上,我想做与之前的命令完全相同的事情,所以我在谷歌上搜索了一种实现这一点的技术。我发现: #!/usr/bin/env node 'use strict'; const options = process.argv; const { execFile } = require('child_process'); const child = execFile('n

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

node test.js
基本上,我想做与之前的命令完全相同的事情,所以我在谷歌上搜索了一种实现这一点的技术。我发现:

#!/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
文件中,我正在使用这个包。因为这个软件包正在制作实时动画,所以它没有标准输出


是否有任何方法可以使用Node实时执行my
test.js(无子流程)?我对其他方法持开放态度,但我想在NPM上发布CLI,因此请记住它必须是JavaScript中的,在需要定义函数的模块后,您只需从CLI代码调用
test()
函数即可。看看mocha和jasmine:您将看到,虽然这两个工具都提供了CLI,但它们也提供了从任意JS代码调用测试框架的说明。

我想不出没有子进程的方法。但这可能会有所帮助。 子进程exec将不使用连续输出命令,因为它缓冲了输出。当缓冲区满时,进程将停止

合适的解决方案是:


这是我的解决方案,您可以使用
fs
库获取文件的代码,然后,您只需使用
eval
在相同的过程中执行

const fs = require("fs");

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

不,因为我的
test.js
不是一个函数,而是一组操作,我可以将所有内容打包到一个函数中,但这不是我想要的。只有在没有其他方法的情况下,我才会这么做。不管你有多个函数。我想说的是,您的CLI是JS代码,可以要求您的核心测试框架模块并使用它。您在同一个代码库中,因此您可以简单地
要求
本地模块。如果其他人正在开发CLI,他会执行
npm安装
来添加对测试框架的依赖,然后从他的代码中调用您的函数/类。我发现了一个更好的解决方案:请参见顶部;)您可以通过
数据轻松地将其转换为字符串。toString('utf8')
谢谢,但我找到了更好的解决方案。请记住,不建议使用
eval
。还有这个
const fs = require("fs");

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