繁体   English   中英

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

[英]Nest.js: I cannot have two modules with same name in application. Is this a bug or a feature?

当前行为

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

输入代码

第三方库
@Module({ providers: [AService] exports: [AService] }) export class AModule { } @Module({ imports: [AModule], providers: [BService] exports: [BService] }) export class BModule { }
我的代码
"@nestjs/common": "^6.9.0",
"@nestjs/core": "^6.9.0"

For Tooling issues:
- Node version: v10.16.0
- Platform: Linux

预期行为

我不确定这是否是一个错误。 但我期待我可以拥有两个具有相同名称的独立 Nest 模块。

环境

"@nestjs/common": "^6.9.0", "@nestjs/core": "^6.9.0" For Tooling issues: - Node version: v10.16.0 - Platform: Linux

好的,所以当嵌套构建它的容器时,每个 class 都会被实例化,并且 class 原型用作唯一标识模块的“符号”。 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 在导入时应该具有模块的唯一标识符键,因此可以具有相同的 class 名称。 不过说实话,我真的不推荐这个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM