[英]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.