У меня есть проект, настроенный как рабочая область nx, он включает проект Nest JS с именем syn c. Я пытаюсь использовать это в Lambda с несколькими функциями, у меня это работает вне рабочего пространства NX, которое компилирует полный каталог, однако в рабочем пространстве NX оно компилируется в основной файл. js, который не включает два файла Lambda, которые вызывают структуру Nest JS.
Думаю, проблема здесь:
"sync": {
"root": "apps/sync",
"sourceRoot": "apps/sync/src",
"projectType": "application",
"prefix": "sync",
"schematics": {},
"architect": {
"build": {
"builder": "@nrwl/node:build",
"options": {
"outputPath": "dist/apps/sync",
"main": "apps/sync/src/main.ts",
"tsConfig": "apps/sync/tsconfig.app.json",
"assets": ["apps/sync/src/assets"],
"scripts": ["apps/sync/src/app/lambdas/**/*"]
},
"configurations": {
"production": {
"optimization": true,
"extractLicenses": true,
"inspect": false,
"fileReplacements": [
{
"replace": "apps/sync/src/environments/environment.ts",
"with": "apps/sync/src/environments/environment.prod.ts"
}
]
}
}
},
"serve": {
"builder": "@nrwl/node:execute",
"options": {
"buildTarget": "sync:build"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"apps/sync/tsconfig.app.json",
"apps/sync/tsconfig.spec.json"
],
"exclude": ["**/node_modules/**", "!apps/sync/**/*"]
}
},
"test": {
"builder": "@nrwl/jest:jest",
"options": {
"jestConfig": "apps/sync/jest.config.js",
"tsConfig": "apps/sync/tsconfig.spec.json",
"passWithNoTests": true
}
}
}
которые всегда компилируют файл JS на основе этого файла:
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app/app.module';
declare const module: any;
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: ['log', 'error', 'warn', 'debug', 'verbose'],
});
const port = process.env.PORT || 3010;
await app.listen(port, () => {
Logger.log('Listening at http://localhost:' + port);
});
if (module.hot) {
module.hot.accept();
module.hot.dispose(() => app.close());
}
}
bootstrap();
Однако у меня есть два файла, которые нужно включить, поскольку они запускают каждую функцию:
import { Handler } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from '../app.module';
import { FooController } from '../foo/foo.controller';
async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule);
return app;
}
export const syncFooHandler: Handler = async (event) => {
const app = await bootstrap();
const fooService = app.get(FooController);
return await fooService.sync(event);
};
import { Handler } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from '../app.module';
import { BarController } from '../bar/bar.controller';
async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule);
return app;
}
export const syncStudentsHandler: Handler = async (event) => {
const app = await bootstrap();
const barService = app.get(BarController);
return await barService.sync(event);
};
Но эти файлы не включены в main.js
файл, который скомпилирован .