Perform async work synchronously in Node.js using a separate process with first-class TypeScript support
# yarn
yarn add synckit
# npm
npm i synckit
worker_threads
is used by default for performance, if you have any problem with it, you can set env SYNCKIT_WORKER_THREADS=0
to disable it and fallback to previously child_process
solution, and please raise an issue here so that we can improve it.
// runner.js
import { createSyncFn } from 'synckit'
// the worker path must be absolute
const syncFn = createSyncFn(require.resolve('./worker'))
// do whatever you want, you will get the result synchronously!
const result = syncFn(...args)
// worker.js
import { runAsWorker } from 'synckit'
runAsWorker(async (...args) => {
// do expensive work
return result
})
You must make sure:
- if
worker_threads
is enabled (by default), theresult
is serialized byStructured Clone Algorithm
- if
child_process
is used, theresult
is serialized byJSON.stringify
If you want to use ts-node
for worker file (a .ts
file), it is supported out of box!
If you want to use a custom tsconfig as project instead of default tsconfig.json
, use TS_NODE_PROJECT
env. Please view ts-node for more details.
If you want to integrate with tsconfig-paths, please view ts-node for more details.
Detailed changes for each release are documented in CHANGELOG.md.