我有一个打字稿项目,而不是首先使用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通信通道。
关于如何实现这一目标的任何想法?
谢谢!
答案 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
一起使用,在生产中也与tsc
和node
一起使用。
在您的app.ts
文件中:
import { fork } from 'child_process';
fork('./longRunningProcess');
然后,您可以在longRunningProcess.ts
文件中使用TypeScript构造。
编译为app.js
和longRunningProcess.js
后,在使用常规node
运行时它仍然可以工作。
答案 2 :(得分:0)
如果ts-node
本身不处理fork
(这有点令人惊讶,但我不使用它),并且您需要IPC,我认为您的选择是:
请事先使用tsc
,以便调用JavaScript文件,或者
按需使用tsc
将ChildProcess.ts
文件编译为ChildProcess.js
文件,然后派生ChildProcess.js
文件。