Nx Monorepo — Как использовать библиотеку NestJS внутри основного приложения Nest

#javascript #reactjs #angular #monorepo #nrwl-nx

Вопрос:

Я работаю в монорельсовом рабочем пространстве Nx. Структура рабочего пространства выглядит примерно так, как показано ниже:

введите описание изображения здесь

Это api приложение NestJS, а data-access-scripts-execute это библиотека NestJS.

Я не знаю, как мне импортировать и использовать упомянутые контроллеры lib внутри моего приложения api. Ниже приведен мой код:

api модуль приложения:

 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();
  }
}
 

Я должен также упомянуть, что:

  • Все мои угловые библиотеки могут видеть другие угловые библиотеки
  • Мое приложение api может видеть все мои угловые библиотеки
  • Все мои библиотеки 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"]
}
 

Я также должен сказать, что изображение не является полным из-за соображений конфиденциальности.

Ответ №1:

Я столкнулся с аналогичной проблемой, и причиной этого была "baseUrl": "." собственность в приложении tsconfig.app.json

Попробуйте удалить это и посмотрите, решит ли это вашу проблему. Это только мое предположение, и я не могу много сказать, не посмотрев на ваше tsconfig.app.json