Ich habe kürzlich ein kleines NestJS-Projekt erstellt, in das ich Sentry integrieren möchte. Ich habe die Anweisungen auf der Nest-Raven -Paket-Readme-Datei zusammen mit den bereitgestellten Anweisungen befolgt von Sentry für die TypeScript-Integration.

Leider kann ich Sentry nicht dazu bringen, die TypeScript-Quellkarten anzuzeigen, sondern nur die regulären JS-Quellkarten, wie Sie hier sehen können:

Sentry Sourcemaps

Ich habe Sentry in main.ts gemäß den Anweisungen initialisiert

import { NestFactory } from '@nestjs/core';
import { RewriteFrames } from '@sentry/integrations';
import * as Sentry from '@sentry/node';
import { AppModule } from './app.module';

// This allows TypeScript to detect our global value
declare global {
  // eslint-disable-next-line @typescript-eslint/no-namespace
  namespace NodeJS {
    interface Global {
      __rootdir__: string;
    }
  }
}

global.__rootdir__ = __dirname || process.cwd();

async function bootstrap() {
  Sentry.init({
    dsn: 'https://mySentryDSN.ingest.sentry.io/0',
    integrations: [
      new RewriteFrames({
        root: global.__rootdir__,
      }),
    ],
  });
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Ich habe auch Nest-Raven für die Verwendung eines globalen Interceptors eingerichtet

import { APP_INTERCEPTOR } from '@nestjs/core';
import { RavenInterceptor, RavenModule } from 'nest-raven';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    RavenModule,
    ...
  ],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: APP_INTERCEPTOR,
      useValue: new RavenInterceptor(),
    },
  ],
})
export class AppModule {}

Ist jemand anderes auf dieses Problem gestoßen? Ich denke, dass ich die Quellkarten möglicherweise gemäß diese Anweisungen Soweit ich weiß, verwendet NestJS jedoch kein Webpack, sodass ich nicht sicher bin, wie ich vorgehen soll.

2
Conor Watson 27 Aug. 2020 im 14:44

2 Antworten

Beste Antwort

Es stellte sich also heraus, dass das Problem das Verzeichnis war, das ich dem Konstruktor RewriteFrames zur Verfügung gestellt habe. Ich hatte die global.__rootdir__ - Implementierung zunächst aus der Sentry Typescript-Dokumentation kopiert. Beim Debuggen stellte ich jedoch fest, dass __dirname und process.cwd() unterschiedliche Pfade zurückgaben.

  dirname: '/Users/<name>/Documents/Projects/nest-test-project/dist',
  cwd: '/Users/<name>/Documents/Projects/nest-test-project'

Da __dirname einen wahrheitsgemäßen Wert zurückgab, war der Pfad, der an Sentry übergeben wurde, derjenige, der den Ordner dist enthielt. Nachdem ich den Code geändert hatte, um Sentry den eigentlichen Stammpfad für das Projekt zu geben, wurden alle Typescript-Quellkarten auf Sentry hochgeladen.

0
Conor Watson 11 Sept. 2020 im 14:09

Sie können Nest dazu bringen, den webpack - Compiler mit nest build --webpack wie beschrieben zu verwenden hier. Es sieht so aus, als ob Sentry auch eine Dokumentation darüber hat, wie Sie die Unterstützung von Quellkarten mithilfe von Typoskript ohne Webpack erhalten können Das ist vielleicht auch einen Besuch wert.

0
Jay McDoniel 27 Aug. 2020 im 20:12