【问题标题】:How to get version from module如何从模块中获取版本
【发布时间】:2021-07-24 04:24:22
【问题描述】:

我有 2 个仓库,我想在仓库 A 上获得正确的 package.json 版本。我的代码目前返回给我 repo B 上的版本。问题是我正在查看路径./package.json。如何获得正确的版本?

在回购A:

@Controller('version')
export class VersionController {
  @Post()
  @HttpCode(200)
  @ApiResponse({
    status: 200,
    description: 'Success',
    type: VersionDto,
  })
  async versionHandler(): Promise<VersionDto> {
    const { version } = require('./package.json');

    try {
      return {
        version,
      };
    } catch (err) {
      throw new InternalServerErrorException(err);
    }
  }

在回购Bapp.module.ts:

@Module({
  imports: [
    
    VersionModule,
  ],
  controllers: [],
})
export class AppModule {}

我调用版本控制器来获取 package.json 中的版本,但不幸的是,这给了我 repo A 的版本,而我想要的是 repo B 的版本。这怎么可能?

目录树:

回购A:

src/
  version/
     version.dto.ts
     version.controller.ts
     version.module.ts

回购 b:

app.module.ts
src/

我对动态模块的尝试。这不起作用:

@Module({})
export class VersionModule {
  static register(options): DynamicModule {
    return {
      module: VersionModule,

      controllers: [VersionController],
      providers: [
        {
          provide: VersionController,
          useValue: options,
        },
      ],
    };
  }
}

【问题讨论】:

  • 向我们展示您的目录树如何
  • 刚刚更新帖子@MicaelLevi
  • package.json 文件与src 处于同一级别?
  • 他们是,是的@MicaelLevi
  • 应用 B 有应用 A 作为其依赖项?

标签: javascript typescript nestjs


【解决方案1】:

基本上你有这样的东西:

B
├── node_modules
│   ├── ...
│   └── A
│       ├── package.json
│       └── code_that_read_package_json.js
└── package.json

这就是为什么当您通过require('./package.json')加载package.json 时,由于相对路径(和模块分辨率),您总是会得到模块Apackage.json规则)。

require('../../package.json') 肯定会解决这个问题,但我认为这不是正确的解决方案。

您可以在注册VersionModule 时通过将其转换为dyamic module 而不是使用async provider 来传递此值,而不是读取整个package.json

也许this article 会帮助你。

【讨论】:

  • 希望有一个关于如何使用动态模块传递此值的示例。我已经更新了我的帖子,说明我如何尝试做一个动态模块,但这不起作用。
【解决方案2】:

我不确定完整的推理是什么,但你可能最终会做类似的事情

const packageJSON = (await readFile(join(process.cwd(), 'package.json'))).toString();
const version = JSON.pasre(packageJSON).version;

其中readFile 是来自fspromises.readFile,而join 是来自path。应该是所有内置功能,它应该根据代码的运行位置读取正确的 package.json。否则,您可以尝试require.resolve(package.json) 使其更具动态性,并将繁重的逻辑留给require。请记住 requireing 和 package.json 如何修改 outdir,因为 typescript 必须准备好。

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2021-02-25
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多