5

我有一个打字稿项目,而不是tsc先使用,我只是ts-node直接运行。

在我的代码中,我需要使用fork().

如果我运行类似代码child_process.fork('ChildProcess.ts')ChildProcess.ts包含一些仅打字稿的构造(例如:import {}、、export...),那么解释器将失败node,而不是。ts-node

可能建议使用类似的东西child_process.exec('node ./node_modules/.bin/ts-node ChildProcess.ts),但我真的想要/需要在fork()专门使用时在父进程和子进程之间建立的 IPC 通信通道。

关于如何实现这一目标的任何想法?

谢谢!

4

3 回答 3

8

参考所述,execArgv在分叉的进程中是从当前进程继承的:

execArgv 传递给可执行文件的字符串参数列表。默认值:process.execArgv。

当入口点运行为:

ts-node index.ts

execArgv默认为ts-node二进制:

[ '...\\ts-node\\dist\\_bin.js' ]

child_process.fork('ChildProcess.ts') 

也运行ts-node

于 2018-09-29T15:03:48.873 回答
2

如果在 fork 进程时省略文件扩展名,它ts-node在开发期间以及tsc生产node中都可以使用。

在您的app.ts文件中:

import { fork } from 'child_process';

fork('./longRunningProcess');

然后你可以在你的longRunningProcess.ts文件中包含 TypeScript 结构。转译为app.jsand后longRunningProcess.js,在常规运行时仍然可以工作node

于 2020-04-18T11:37:05.447 回答
0

如果ts-node不能fork自行处理(这有点令人惊讶,但我不使用它),并且您需要 IPC,我认为您的选择是:

  • 预先使用tsc,以便调用 JavaScript 文件,或

  • 使用tscon-demand 将文件编译ChildProcess.tsChildProcess.js文件,然后 forkChildProcess.js文件。

于 2018-09-29T14:48:38.300 回答