【问题标题】:Nx Monorepo - How to Use NestJs Library inside the Main Nest AppNx Monorepo - 如何在主 Nest 应用程序中使用 NestJs 库
【发布时间】:2021-06-05 13:45:07
【问题描述】:

我在 Nx monorepo 工作区工作。工作区结构如下:

api 是 NestJS 应用,data-access-scripts-execute 是 NestJS 库。

我不知道应该如何在我的 api 应用程序中导入和使用提到的 lib 控制器。以下是我的代码:

api的AppModule:

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';

// This line says 'Cannot find module '@something/data-access-scripts-execute'
// or its corresponding type declarations.'
import { SomeController } from '@something/data-access-scripts-execute';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true, expandVariables: true }),
    MongooseModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => ({
        uri: 'mongodb://localhost/something',
        useFindAndModify: false,
      }),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

lib 的控制器:

import { Controller, Post } from '@nestjs/common';
import { SomeService } from './some.service';
import { SomeEntity } from './schemas/some.schema';

@Controller('some-address')
export class SomeController {
  constructor(private readonly _service: SomeService) {}
  
  @Post()
  async create(): Promise<SomeEntity> {
    console.log('create called');
    
    return this._service.create();
  }
}

我还应该提到:

  • 我所有的 Angular 库都可以看到其他 Angular 库
  • 我的 api 应用可以看到我所有的 Angular 库
  • 我所有的 NestJS 库都看不到其他库
  • 我所有的 NestJS 库都不能被其他库和应用看到

see 这个词实际上是指@something 我的项目名称。

以下也是我的tsconfig.base.json 文件,它位于工作区的根目录中:

{
  "compileOnSave": false,
  "compilerOptions": {
    "rootDir": ".",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es2015",
    "module": "esnext",
    "lib": ["es2017", "dom"],
    "skipLibCheck": true,
    "skipDefaultLibCheck": true,
    "baseUrl": ".",
    "paths": {
      "@something/system": ["libs/system/src/index.ts"],
      "@something/feature-some-angular-lib": [
        "libs/feature-some-angular-lib/src/index.ts"
      ],
      "@something/feature-some-angular-lib": [
        "libs/feature-some-angular-lib/src/index.ts"
      ],
      "@something/shared": ["libs/shared/src/index.ts"],
      "@something/data-access-scripts-execute": ["libs/data-access-scripts-execute/src/index.ts"]
    }
  },
  "exclude": ["node_modules", "tmp"]
}

我还应该说,由于隐私原因,图像并不完整。

【问题讨论】:

    标签: javascript reactjs angular monorepo nrwl-nx


    【解决方案1】:

    我遇到了类似的问题,原因是应用程序的 tsconfig.app.json 中的 "baseUrl": "." 属性

    尝试删除它,看看它是否能解决您的问题。这只是我的猜测,如果不看你的tsconfig.app.json,我不能说太多

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 2019-07-20
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2021-10-19
      • 2020-02-05
      • 2019-09-22
      • 2021-08-22
      相关资源
      最近更新 更多