Javascript 在另一个NodeJS进程内执行JS文件(包括日志等)
这是我的问题,我想创建一个自动运行测试的CLI。没有CLI,我可以使用node命令完美地运行一切: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
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'))
})
}