Sentry-javascript: ¡El módulo 'ngRaven' no está disponible! O bien escribió mal el nombre del módulo o se olvidó de cargarlo. Si registra un módulo, asegúrese de especificar las dependencias como segundo argumento.

Creado en 14 mar. 2016  ·  23Comentarios  ·  Fuente: getsentry/sentry-javascript

Este es mi orden de archivos en karma.conf.js para ejecutar pruebas de karma jasmine uint.

archivos: ['app / bower_components / jquery / dist / jquery.min.js',
'app / bower_components / angular / angular.min.js',
'app / bower_components / raven-js / dist / raven.js',
'aplicación / bower_components / raven-js / plugins / angular.js'
]
Aunque el evento incluí 'app / bower_components / raven-js / plugins / angular.js' Recibo el error que indica que el módulo 'ngRaven' no está disponible.

Comentario más útil

Oh, está bien, esto en realidad va en contra de la forma angular en la que generalmente hacemos este tipo de configuración en un módulo que requeriría ngRaven , pero hacerlo de esta manera lo hace imposible.

Creo que debería especificar esto en la documentación, ya que no está especificado en absoluto.

Todos 23 comentarios

+1

¿Hay algo que podamos hacer aquí? Estoy un poco confundido. :)

Oh, jk, leí el Stackoverflow. Funciona con el paquete angular-raven, pero no con el nuestro.

Según la documentación actual, el complemento angular centinela ahora debería funcionar

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

¿Podría faltar el directorio 'dist' en 'app / bower_components / raven-js / plugins / angular.js'?

Según los documentos [https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower] debería ser:

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

Siguiendo la documentación, angular no puede encontrar el módulo por mí. Sin embargo, la solución de desbordamiento de pila funciona para mí.

¿Podría faltar el directorio 'dist' en 'app / bower_components / raven-js / plugins / angular.js'?

Eso definitivamente lo haría.

Si alguien aquí pudiera proporcionarme un ejemplo concreto, estaría encantado de profundizar en esto.

@benvinegar https://plnkr.co/edit/S1Dk9t?p=preview esta es una muestra simple del error,

Basado en https://github.com/getsentry/raven-js/blob/master/docs/integrations/angular.rst
Dice:
_Tenga en cuenta que esta compilación de CDN inicializa automáticamente el complemento Angular.

Pero importar solo eso, como dice la documentación, arroja un error, verifique el registro en plnkr
[$ injector: nomod ] ¡El módulo 'ngRaven' no está disponible! O bien escribió mal el nombre del módulo o se olvidó de cargarlo. Si registra un módulo, asegúrese de especificar las dependencias como segundo argumento.

¿Quizás esto es solo una mala interpretación de los documentos?

¿Alguna noticia sobre esto? Creo que el plugin angular sólo funciona para CommonJS, ya que este es en realidad nunca se llama cuando simplemente incluyendo el archivo. Por favor, corríjalo para que podamos usar el complemento.

Aquí está el ejemplo más simple después de su página de integración que no funciona: https://plnkr.co/edit/M5nt6Y?p=preview

@RobertBaron @mebibou : en ambos ejemplos, debe configurar Raven antes de inicializar su aplicación. Los complementos no se inicializan hasta que se llama a Raven.install() .

Esto está en todos los ejemplos de documentación , por ejemplo:

<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>

Aunque podría hacerse más explícito que el script de su aplicación (por ejemplo, app.js ) debe venir después.

Oh, está bien, esto en realidad va en contra de la forma angular en la que generalmente hacemos este tipo de configuración en un módulo que requeriría ngRaven , pero hacerlo de esta manera lo hace imposible.

Creo que debería especificar esto en la documentación, ya que no está especificado en absoluto.

+1

Ver # 413, @benvinegar ¿Está listo para abordar?

@Sija : dado que la gente sigue tropezando con esto, estoy de acuerdo con la fusión. Aunque me preocupa el caso en el que alguien podría haber declarado a Raven _antes_ Angular. Pero al menos los usuarios de CDN deben actualizar manualmente.

No olvide agregar el bit en negrita a continuación

Cuervo
.config ('https: //@ sentry.io /')
.addPlugin (Raven.Plugins.Angular)
.Instalar en pc();

@theatrain además de eso, debe agregar una anulación en su package.json si usa gulp inject o algo similar que incluya dependencias de paquetes en su html automáticamente.
Lo siguiente fue mi solución ya que uso gulp-inject

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

También encontré una buena solución para el gruñido, ya que todo estaba feo y reducido:

Mi app.js veía así:

'use strict';

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

Hice otro archivo llamado raven.js

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

Y en index.html en lugar de scripts en línea:

<!-- 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 -->

Ahora, cuando grunt build:dist que uglifica / minimiza, grunt optimizará mi script para que el complemento pueda registrarse. Hacer scripts en línea no provocará la optimización, por lo que window.angular no será adecuado para que el complemento se cargue automáticamente.

En general, el flujo es el siguiente (la documentación es correcta)

  • traer angular
  • traer raven
  • traer raven/plugins/angular.js
  • config / addPlugin / install ngRaven pero hecho correctamente para tener en cuenta la uglificación / minificación

También otra cosa a tener en cuenta es que la mayoría de las configuraciones pueden suceder más tarde (aunque se pierden las etiquetas en cualquier problema durante el arranque)

Por ejemplo, una configuración de heroku cargada después del hecho.

'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,
      }
    });
  });

¿Algún avance en esto? También tuve problemas aquí con nuestro conjunto de pruebas de karma.

@xeroxoid También tuvimos problemas con esto durante las pruebas de karma y pudimos solucionarlo.

En nuestro caso, estábamos omitiendo la rutina Raven.config().addPlugin().install() en el entorno de prueba porque no queríamos que se enviaran a Sentry.

El problema con eso es que raven-js no hace las cosas "de forma angular" con los módulos, y en su lugar solo registra el módulo ngRaven si llamaste a Raven.config() con un DSN.

El método addPlugin() solo registra el módulo angular si la configuración se configuró correctamente (por ejemplo, con una URL de DSN definida).

Para solucionar esto, lo hicimos de modo que Raven.config().addPlugin().install() siempre se ejecute incluso en nuestro conjunto de pruebas, usamos nuestra URL DSN normal y luego usamos el método config.shouldSendCallback para bloquear el envío a centinela en el entorno de prueba .

Esto permite que raven-js registre correctamente el módulo angular.

¡Espero que ayude!

Estamos haciendo lo mismo, pero en su lugar pasamos un DSN falso (esto es para nuestro entorno de desarrollo). Algo como https://[email protected]/1 funciona bien (Raven parece hacer algo de aplicación en las propiedades de la URL, por lo que el nombre de usuario debe estar presente junto con la ruta).

Cierre por inactividad prolongada. Este hilo también contiene algunas soluciones por si acaso. No dude en volver a abrir este problema si aún es relevante de alguna manera.

¿Fue útil esta página
0 / 5 - 0 calificaciones