Sentry-javascript: Modul 'ngRaven' ist nicht verfügbar! Sie haben entweder den Modulnamen falsch geschrieben oder vergessen, ihn zu laden. Stellen Sie beim Registrieren eines Moduls sicher, dass Sie die Abhängigkeiten als zweites Argument angeben.

Erstellt am 14. März 2016  ·  23Kommentare  ·  Quelle: getsentry/sentry-javascript

Dies ist meine Reihenfolge der Dateien in karma.conf.js zum Ausführen von Karma Jasmine Uint-Tests.

Dateien: ['app/bower_components/jquery/dist/jquery.min.js',
'app/bower_components/angular/angular.min.js',
'app/bower_components/raven-js/dist/raven.js',
'app/bower_components/raven-js/plugins/angular.js'
]
Obwohl ich 'app/bower_components/raven-js/plugins/angular.js' eingefügt habe, erhalte ich die Fehlermeldung, dass das Modul 'ngRaven' nicht verfügbar ist.

Hilfreichster Kommentar

Oh ok, das widerspricht eigentlich der Angular-Methode, bei der wir normalerweise diese Art von Konfiguration in einem Modul durchführen, das ngRaven erfordert, aber auf diese Weise ist es unmöglich.

Ich denke, Sie sollten dies in der Dokumentation angeben, da es überhaupt nicht angegeben ist.

Alle 23 Kommentare

+1

Gibt es etwas, was wir hier tun können? Ich bin ein bisschen verwirrt. :)

Oh, jk, ich habe den Stackoverflow gelesen. Es funktioniert mit dem Winkel-Raven-Paket, aber nicht mit unserem.

Laut der aktuellen Dokumentation sollte das Sentry-Winkel-Plugin jetzt funktionieren

https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/

Fehlt möglicherweise das Verzeichnis 'dist' in 'app/bower_components/raven-js/plugins/angular.js'?

Laut Dokumentation [https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower] sollte es sein:

<script src="/bower_components/raven-js/dist/plugins/angular.js"></script>

Nach der Dokumentation kann Angle das Modul für mich nicht finden. Die Stack-Overflow-Lösung funktioniert jedoch bei mir.

Fehlt möglicherweise das Verzeichnis 'dist' in 'app/bower_components/raven-js/plugins/angular.js'?

Das würde es auf jeden Fall tun.

Wenn mir hier jemand ein konkretes Beispiel liefern könnte, würde ich mich gerne darauf einlassen.

@benvinegar https://plnkr.co/edit/S1Dk9t?p=preview Dies ist ein einfaches Beispiel für den Fehler.

Basierend auf https://github.com/getsentry/raven-js/blob/master/docs/integrations/angular.rst
Es sagt:
_Beachten Sie, dass dieser CDN-Build das Angular-Plugin automatisch initialisiert._

Aber nur das zu importieren, wie in der Dokumentation angegeben, wirft einen Fehler aus. Bitte überprüfen Sie das Protokoll im plnkr
[$ Injektor:nomod ] Modul 'ngRaven' ist nicht verfügbar! Sie haben entweder den Modulnamen falsch geschrieben oder vergessen, ihn zu laden. Stellen Sie beim Registrieren eines Moduls sicher, dass Sie die Abhängigkeiten als zweites Argument angeben.

Vielleicht ist das nur eine Fehlinterpretation der Dokumentation?

Gibt es Neuigkeiten zu diesem Thema? Ich denke, das Angular-Plugin funktioniert nur für CommonJs, da dies eigentlich nie aufgerufen wird, wenn nur die Datei eingebunden wird. Bitte beheben, damit wir das Plugin verwenden können

Hier ist das einfachste Beispiel nach Ihrer Integrationsseite , das nicht funktioniert: https://plnkr.co/edit/M5nt6Y?p=preview

@RobertBaron @mebibou – in beiden Beispielen müssen Sie Raven konfigurieren, bevor Sie Ihre App initialisieren. Plugins werden erst initialisiert, wenn Raven.install() aufgerufen wird.

Dies ist in allen Dokumentationsbeispielen zum Beispiel:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="https://cdn.ravenjs.com/3.6.1/angular/raven.min.js"></script>
<script>Raven.config('https://<key>@app.getsentry.com/<project>').install();</script>

Es könnte jedoch deutlicher gemacht werden, dass Ihr Anwendungsskript (zB app.js ) danach kommen muss.

Oh ok, das widerspricht eigentlich der Angular-Methode, bei der wir normalerweise diese Art von Konfiguration in einem Modul durchführen, das ngRaven erfordert, aber auf diese Weise ist es unmöglich.

Ich denke, Sie sollten dies in der Dokumentation angeben, da es überhaupt nicht angegeben ist.

+1

Siehe #413, @benvinegar Ist es bereit, es in Angriff zu nehmen?

@Sija – angesichts der stolpern , kann ich gut fusionieren. Obwohl ich mir Sorgen um den Fall mache, in dem jemand Raven _before_ Angular erklärt haben könnte. Aber zumindest müssen CDN-Benutzer manuell aktualisieren.

Vergessen Sie nicht, das unten fett gedruckte Bit hinzuzufügen

Rabe
.config('https://@sentry.io/')
.addPlugin(Raven.Plugins.Angular)
.Installieren();

@theatrain Außerdem müssen Sie Ihrer package.json eine Überschreibung hinzufügen, wenn Sie gulp inject oder etwas Ähnliches verwenden, das automatisch Paketabhängigkeiten von Ihrem HTML einschließt.
Das folgende Gebrüll war meine Lösung, da ich gulp-inject verwende

    "overrides": {
        "raven-js" : {
            "main": [
                "dist/raven.js",
                "dist/plugins/angular.js"
            ]
        }
    },

Ich habe auch einen guten Workaround für Grunzen gefunden, da alles verhässlich und minimiert wurde:

Mein app.js sah so aus:

'use strict';

angular
  .module('sraApp', [
    'ngRaven'
  ]);

Ich habe eine weitere Datei namens raven.js

// redacted sensitive info
Raven
  .config('https://<code>@sentry.io/<myapp>')
  .addPlugin(Raven.Plugins.Angular)
  .install();

Und in der index.html anstelle von Inline-Skripten:

<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/raven-js/dist/raven.js"></script>
<!-- endbower -->
<!-- Outside of auto-managed bower, but still inside compile -> vender.js -->
<script src="bower_components/raven-js/dist/plugins/angular.js"></script>
<!-- endbuild -->

<!-- build:js({.tmp,app}) scripts/scripts.js -->
<script src="scripts/raven.js"></script>
<script src="scripts/app.js"></script>
<!-- endbuild -->

Wenn ich jetzt grunt build:dist das Grunzen hässlich/minimiert, mein Skript optimiere, so dass das Plugin registriert werden kann. Das Ausführen von Inline-Skripten führt nicht zur Optimierung, sodass window.angular nicht für das automatische Laden des Plugins geeignet ist.

Insgesamt sieht der Ablauf wie folgt aus (Dokumentation ist korrekt)

  • bringen angular
  • bringen raven
  • bringen raven/plugins/angular.js
  • config/addPlugin/install ngRaven aber richtig gemacht, um Uglifizierung/Minifizierung zu berücksichtigen

Außerdem ist zu beachten, dass die meisten Konfigurationen später erfolgen können (obwohl Sie während des Bootstraps bei Problemen Tags verpassen).

Zum Beispiel eine Heroku-Konfiguration, die nachträglich geladen wurde.

'use strict';

angular.module('sraApp')
  .run(function (Raven, HEROKU_APP_ID, HEROKU_APP_NAME, HEROKU_RELEASE_CREATED_AT, HEROKU_RELEASE_VERSION, HEROKU_SLUG_COMMIT, HEROKU_SLUG_DESCRIPTION, NODE_ENV) {
    Raven.setRelease(HEROKU_RELEASE_VERSION);
    Raven.setEnvironment(NODE_ENV);
    Raven.setTagsContext({
      release_date: HEROKU_RELEASE_CREATED_AT,
      git_commit: HEROKU_SLUG_COMMIT,
      slug_description: HEROKU_SLUG_DESCRIPTION,
      application: {
        name: HEROKU_APP_NAME,
        id: HEROKU_APP_ID,
      }
    });
  });

Gibt es hierzu Neuigkeiten? Habe auch hier Probleme mit unserer Karma-Testsuite.

@xeroxoid Wir hatten damit auch bei Karma-Tests Probleme und konnten es

In unserem Fall haben wir die Raven.config().addPlugin().install() Routine in der Testumgebung übersprungen, weil wir nicht wollten, dass sie an den Posten gesendet werden.

Das Problem dabei ist, dass raven-js die Dinge nicht "auf die eckige Art" mit Modulen macht - und stattdessen das ngRaven Modul nur registriert, wenn Sie Raven.config() mit einem DSN aufgerufen haben.

Die Methode addPlugin() registriert das Angular-Modul nur, wenn die Konfiguration korrekt eingerichtet wurde (zB mit einer definierten DSN-URL).

Um dies zu beheben, haben wir es so gemacht, dass Raven.config().addPlugin().install() auch in unserer Testsuite immer ausgeführt wird. Wir verwenden unsere normale DSN-URL und verwenden dann die Methode config.shouldSendCallback , um das Senden an den Wachdienst in der Testumgebung zu blockieren .

Dadurch kann raven-js das Winkelmodul richtig registrieren.

Hoffentlich hilft das!

Wir machen dasselbe, aber wir übergeben stattdessen einen gefälschten DSN (dies ist für unsere Entwicklungsumgebung). Etwas wie https://[email protected]/1 funktioniert gut (Raven scheint die Eigenschaften der URL etwas durchzusetzen, daher muss der Benutzername zusammen mit dem Pfad vorhanden sein).

Schließung wegen langer Inaktivität. Dieser Thread enthält auch einige Workarounds für alle Fälle. Bitte zögern Sie nicht, dieses Problem erneut zu öffnen, wenn es in irgendeiner Weise noch relevant ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen