在运行时检测服务的项目包名称

detect the service's project package name at runtime

我构建了两个用 TypeScript 编写的 NestJS 项目。每个项目都是一个微服务。

我还用打字稿开发了一个共享库项目。上面提到的两个微服务项目都在使用这个库。

现在,在库项目函数中,我需要在运行时检测哪个微服务正在调用该函数:

// this is the shared library project
const foo = () => {
   // I need to know the name of the micro-service that is defined in its package.json 
   // to identify who is now calling this function
}

我可能错了,但我觉得理想的方法是获取在其 package.json 中声明的服务项目的 name。例如,我想检测这是 my-service-one 如果此服务的项目 package.json 看起来像:

{
  "name": "my-service-one",
  "version": "1.0.3",
  ...
  ...
}

我试图从 process 对象中嗅探,但在运行时没有这样的信息。在library项目代码里面,如何检测是哪个service调用了library function呢?

您可以直接导入 package.json,但请注意,由于 Typescript 的工作方式,这可能会扰乱 dist 输出(而不是 dist/main,您会得到 dist/src/main ).另一种选择是使用 fs 包中的 JSON.parse()readFile。像

import { readFile } from 'fs/promises';
import * as path from 'path';

const packageJson = JSON.parse(
  await readFile(
    path.join(
      process.cwd(),
      'package.json',
    )
  )
);
const { name, version } = packageJson;