Nest.js:我在应用程序中不能有两个名称相同的模块。这是错误还是功能?

当前行为

应用程序中不能有两个同名模块。应用程序中只有第一个模块可用。就我而言,这是“ ./my-a-module”中的AModule

输入代码

第三方图书馆
@Module({
    providers: [AService]
    exports: [AService]
})
export class AModule {
}

@Module({
    imports: [AModule],providers: [BService]
    exports: [BService]
})
export class BModule {
}
我的密码
import { BModule } from "third-party-library";
import { AModule } from "./my-a-module";

@Module({
    imports: [
        AModule,BModule
    ]
})
export class CModule {
}

预期行为

我不确定这是否是错误。但是我期望我可以有两个单独的具有相同名称的nest模块。

环境

"@nestjs/common": "^6.9.0","@nestjs/core": "^6.9.0"

For Tooling issues:
- Node version: v10.16.0
- Platform: Linux
girlmimi 回答:Nest.js:我在应用程序中不能有两个名称相同的模块。这是错误还是功能?

请参阅相关问题https://github.com/nestjs/nest/issues/3362和修复程序https://github.com/nestjs/nest/pull/3363

,

好吧,当嵌套构建它的容器时,每个类都被实例化,并且该类原型用作“符号”来唯一地标识模块。 nestjs中的模块与ES6 MJS中的导出模块不同。因此,您在这里所做的是

@Module({
  providers: [TestProvider],})
export class ModuleA {}

@Module({})
export class ModuleA {}

const dummyContainer = {
  [ModuleA.constructor.name] = new ModuleA(),[ModuleA.constructor.name] = new ModuleA(),};

但是,在我做出的另一个回答中,您可以像上面这样再次使用DynamicModule来更改键值


@Module({})
export class ModuleA {
  public static forRoot(): DynamicModule {
    return {
      module: 'UNIQUE_IDENTIFIER',providers: [TestProvider],};
  }
}

@Module({})
export class ModuleA{}

现在使用上述示例时,

import {ModuleA as ModuleB} from './for-root-example';
import {ModuleA} from './moduleA';

@Module({
  imports: [
    ModuleA,ModuleB.forRoot(),],})

ModuleA(例如MobuleB)在导入时应具有模块的唯一标识符键,因此可以具有相同的类名。不过,老实说,我真的不推荐这样做。

本文链接:https://www.f2er.com/3139043.html

大家都在问