javascript 如何从另一个JS文件运行一个JS文件?

mklgxw1f  于 2023-05-16  发布在  Java
关注(0)|答案(1)|浏览(159)

我在游戏机中构建了一个游戏,我使用了一个名为“prompts”的NPM包,它会询问游戏用户,“你想运行哪个操作系统?””并返回为JSON。例如,如果您选择“OS 1”,它将返回{启动:“StartOS1”}。我想做的基本上是有一个这样的if语句:

if(Bootup == "StartOS1") {
 // The code to run another JS file here.
}

但我不知道该写什么。
我尝试过使用一个名为shelljs的NPM包来实现这一点,它在shell中执行一些东西:

const shell = require('shelljs')

if(Bootup == "StartOS1") {
  shell.exec('node OS1.js')
}

这样做的结果是使我的shell永远停留在一个空白行上,我不得不重新启动它。这是一个我正在尝试做的事情的例子。

8oomwypt

8oomwypt1#

shell.exec('node OS1.js')是一个同步函数,它会阻塞你的程序。例如,如果你的js文件正在等待一个事件,它可能会无限期地阻止你的函数。尝试child_processexec()方法。这应有助于:

const { exec } = require('child_process');

exec('node OS1.js', (e, stdout, stde) => {
  if (error) {
    console.error(`exec error: ${e}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stde}`);
});

还有其他几个方法可以使用,但这个方法将js文件作为字符串读取,然后通过另一个同步eval函数执行。不过,我听说在安全方面这不是最好的做法。

const fs = require('fs');

fs.readFile('./node OS1.js', 'utf8', function(e, file) {
  if (e) {
    console.error(e);
    return;
  }
  eval(file);
});

相关问题