#2086·ts-node

ts-node 没有按照预期运行 ESM 模块,或者拒绝在 ts 文件中执行 `import` 语句,或者无法运行 `.ts` 文件

作者: GovindarajanNagarajan-TomTom创建于 2023年11月16日更新于 2026年4月22日

import Redis from 'ioredis'; import { fork } from 'child_process'; import dotenv from 'dotenv';

import { Worker } from './worker'; import { isValid } from './../shared/lib/utils';

dotenv.config(); const streamNames: string[] = ["stream-1", "stream-2"]; const numWorkersPerStream: number = 5; const REDIS_HOST = process.env.REDIS_HOST; const REDIS_PORT = isValid(process.env.REDIS_PORT) ? parseInt(process.env.REDIS_PORT!, 10) : null;

if (!isValid(REDIS_HOST)) { console.error('REDIS_HOST is not a valid environmental variable'); process.exit(1); }

if (!isValid(REDIS_PORT)) { console.error('REDIS_PORT is not a valid environmental variable'); process.exit(1); }

const redisClient = new Redis({ host: REDIS_HOST!, port: REDIS_PORT!, });

async function createConsumerGroupIfNotExists(streamName: string, consumerGroup: string) { try { await redisClient.xgroup('CREATE', streamName, consumerGroup, '$', 'MKSTREAM'); console.log(Consumer group "${consumerGroup}" created (if not already exists) for stream "${streamName}"); } catch (error: any) { if (!error.message.includes('BUSYGROUP Consumer Group name already exists')) { console.error('Error creating consumer group:', error); } } }

// Create consumer groups only once for (let i = 0; i < streamNames.length; i++) { const streamName = streamNames[i]; const consumerGroup = ${streamName}-group; createConsumerGroupIfNotExists(streamName, consumerGroup); }

// Create worker processes for each stream and group combination for (let i = 0; i < streamNames.length; i++) { for (let j = 0; j < numWorkersPerStream; j++) { const workerName: string = worker-${streamNames[i]}-${j}; const streamName: string = streamNames[i]; const consumerGroup: string = ${streamName}-group; const args: string[] = [workerName, streamName, consumerGroup, REDIS_HOST!, REDIS_PORT!.toString()]; const workerProcess = …

内容来源: TypeStrong/ts-node