使用 ts-node 时通过 fork() 调用子进程
invoke a child process via fork() when using ts-node
我有一个打字稿项目,而不是先使用 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)
的东西,但我真的want/need在父子进程之间建立的IPC通信通道是专门使用fork()
的.
关于如何实现这一点有什么想法吗?
谢谢!
如果 ts-node
不处理 fork
本身(这有点令人惊讶,但我不使用它),并且您需要 IPC,我认为您的选择是:
预先使用 tsc
以便调用 JavaScript 文件,或者
按需使用tsc
将ChildProcess.ts
文件编译成ChildProcess.js
文件,然后fork出ChildProcess.js
文件。
如the reference所述,分叉进程中的execArgv
是从当前进程继承的:
execArgv List of string arguments passed to the executable. Default: process.execArgv.
当入口点运行为:
ts-node index.ts
execArgv
默认为 ts-node
二进制:
[ '...\ts-node\dist\_bin.js' ]
和
child_process.fork('ChildProcess.ts')
也与 ts-node
一起运行。
如果在分叉进程时省略文件扩展名,它在开发过程中与 ts-node
一起工作,在生产过程中与 tsc
和 node
一起工作。
在您的 app.ts
文件中:
import { fork } from 'child_process';
fork('./longRunningProcess');
然后您可以在 longRunningProcess.ts
文件中使用 TypeScript 结构。
转译为 app.js
和 longRunningProcess.js
后,它在 运行 常规 node
.
时仍然有效
我有一个打字稿项目,而不是先使用 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)
的东西,但我真的want/need在父子进程之间建立的IPC通信通道是专门使用fork()
的.
关于如何实现这一点有什么想法吗?
谢谢!
如果 ts-node
不处理 fork
本身(这有点令人惊讶,但我不使用它),并且您需要 IPC,我认为您的选择是:
预先使用
tsc
以便调用 JavaScript 文件,或者按需使用
tsc
将ChildProcess.ts
文件编译成ChildProcess.js
文件,然后fork出ChildProcess.js
文件。
如the reference所述,分叉进程中的execArgv
是从当前进程继承的:
execArgv List of string arguments passed to the executable. Default: process.execArgv.
当入口点运行为:
ts-node index.ts
execArgv
默认为 ts-node
二进制:
[ '...\ts-node\dist\_bin.js' ]
和
child_process.fork('ChildProcess.ts')
也与 ts-node
一起运行。
如果在分叉进程时省略文件扩展名,它在开发过程中与 ts-node
一起工作,在生产过程中与 tsc
和 node
一起工作。
在您的 app.ts
文件中:
import { fork } from 'child_process';
fork('./longRunningProcess');
然后您可以在 longRunningProcess.ts
文件中使用 TypeScript 结构。
转译为 app.js
和 longRunningProcess.js
后,它在 运行 常规 node
.