在运行时检测服务的项目包名称
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;
我构建了两个用 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;