使用ts-node时通过fork()调用子进程

时间:2018-09-29 14:40:02

标签: node.js typescript child-process ts-node

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

在我的代码中,我需要使用fork()创建一个子进程。

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

the reference指出,分叉过程中的execArgv是从当前过程继承的:

  

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

入口点的运行方式为:

ts-node index.ts

execArgv默认为ts-node二进制:

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

child_process.fork('ChildProcess.ts') 

也与ts-node一起运行。

答案 1 :(得分:1)

如果在分叉过程中省略了文件扩展名,则在开发过程中它与ts-node一起使用,在生产中也与tscnode一起使用。

在您的app.ts文件中:

import { fork } from 'child_process';

fork('./longRunningProcess');

然后,您可以在longRunningProcess.ts文件中使用TypeScript构造。 编译为app.jslongRunningProcess.js后,在使用常规node运行时它仍然可以工作。

答案 2 :(得分:0)

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

  • 请事先使用tsc,以便调用JavaScript文件,或者

  • 按需使用tscChildProcess.ts文件编译为ChildProcess.js文件,然后派生ChildProcess.js文件。