Sentry-javascript: Le module 'ngRaven' n'est pas disponible ! Soit vous avez mal orthographié le nom du module, soit vous avez oublié de le charger. Si vous enregistrez un module, assurez-vous de spécifier les dépendances comme deuxième argument.

Créé le 14 mars 2016  ·  23Commentaires  ·  Source: getsentry/sentry-javascript

Ceci est ma commande de fichiers dans karma.conf.js pour exécuter les tests karma jasmine uint ..

fichiers : ['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'
]
Même si j'ai inclus 'app/bower_components/raven-js/plugins/angular.js', j'obtiens l'erreur indiquant que le module 'ngRaven' n'est pas disponible.

Commentaire le plus utile

Oh ok, cela va en fait à l'encontre de la méthode Angular où nous effectuons généralement ce type de configuration dans un module qui nécessiterait ngRaven , mais cela rend cela impossible.

Je pense que vous devriez le spécifier dans la documentation car ce n'est pas spécifié du tout.

Tous les 23 commentaires

+1

Y a-t-il quelque chose de concret que nous pouvons faire ici ? Je suis un peu confus. :)

Oh, jk, j'ai lu le Stackoverflow. Cela fonctionne avec le package angular-raven, mais pas le nôtre.

Selon la documentation actuelle, le plugin angulaire sentinelle devrait maintenant fonctionner

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

Le répertoire « dist » est-il manquant dans « app/bower_components/raven-js/plugins/angular.js » ?

Selon la documentation [https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower], cela devrait être :

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

En suivant la documentation, angulaire ne trouve pas le module pour moi. La solution de débordement de pile fonctionne pour moi cependant.

Le répertoire « dist » est-il manquant dans « app/bower_components/raven-js/plugins/angular.js » ?

Cela le ferait certainement.

Si quelqu'un ici pouvait me fournir un exemple concret, je serais heureux d'approfondir cela.

@benvinegar https://plnkr.co/edit/S1Dk9t?p=preview ceci est un exemple simple de l'erreur,

Basé sur https://github.com/getsentry/raven-js/blob/master/docs/integrations/angular.rst
Ça dit:
_Notez que cette version CDN initialise automatiquement le plugin Angular._

Mais importer uniquement cela comme le dit la documentation génère une erreur, veuillez vérifier le journal dans le plnkr
[$ injecteur:nomod ] Le module 'ngRaven' n'est pas disponible ! Soit vous avez mal orthographié le nom du module, soit vous avez oublié de le charger. Si vous enregistrez un module, assurez-vous de spécifier les dépendances comme deuxième argument.

C'est peut-être juste une mauvaise interprétation de la doc ?

des nouvelles à ce sujet? Je pense que le plugin angulaire ne fonctionne que pour CommonJs, car il n'est en fait jamais appelé lors de l'inclusion du fichier. Veuillez corriger afin que nous puissions utiliser le plugin

Voici l'exemple le plus simple suivant votre page d'intégration qui ne fonctionne pas : https://plnkr.co/edit/M5nt6Y?p=preview

@RobertBaron @mebibou - dans les deux exemples, vous devez configurer Raven avant d'initialiser votre application. Les plugins ne sont pas initialisés tant que Raven.install() n'est pas appelé.

C'est dans tous les exemples de documentation , par exemple :

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

Bien qu'il puisse être rendu plus explicite que votre script d'application (par exemple app.js ) doit venir après.

Oh ok, cela va en fait à l'encontre de la méthode Angular où nous effectuons généralement ce type de configuration dans un module qui nécessiterait ngRaven , mais cela rend cela impossible.

Je pense que vous devriez le spécifier dans la documentation car ce n'est pas spécifié du tout.

+1

Voir #413, @benvinegar Est-il prêt à affronter ?

@Sija - étant donné que les gens n'arrêtent pas de trébucher là-dessus, je suis d'accord pour fusionner. Bien que je m'inquiète du cas où quelqu'un aurait pu déclarer Raven _before_ Angular. Mais au moins les utilisateurs de CDN doivent mettre à niveau manuellement.

N'oubliez pas d'ajouter le bit en gras ci-dessous

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

@theatrain en plus de cela, vous devez ajouter une substitution sur votre package.json si vous utilisez
Le ci-dessous était ma solution depuis que j'utilise gulp-inject

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

J'ai également trouvé une bonne solution de contournement pour grunt puisque tout était laid et minifié :

Mon app.js ressemblait à :

'use strict';

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

J'ai fait un autre fichier appelé raven.js

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

Et dans le fichier index.html au lieu des scripts en ligne :

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

Maintenant, quand je grunt build:dist qui uglifie/minifie grunt optimisera mon script afin que le plugin puisse être enregistré. Faire des scripts en ligne ne provoquera pas l'optimisation, donc window.angular ne conviendra pas au plugin pour se charger automatiquement.

Globalement le flux est le suivant (la documentation est correcte)

  • apporter angular
  • apporter raven
  • rapporter raven/plugins/angular.js
  • config/addPlugin/install ngRaven mais fait correctement pour prendre en compte l'uglification/minification

Une autre chose à noter également que la plupart des configurations peuvent se produire plus tard (bien que vous manquiez des balises sur les problèmes lors de l'amorçage)

Par exemple, une configuration heroku chargée après coup.

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

Une mise à jour pour ceci? J'ai également eu des problèmes ici avec notre suite de tests de karma.

@xeroxoid Nous avons également eu des problèmes avec cela lors des tests de karma et avons pu le contourner.

Dans notre cas, nous sautions la routine Raven.config().addPlugin().install() dans l'environnement de test parce que nous ne voulions pas qu'ils soient envoyés à sentinelle.

Le problème, c'est que raven-js ne fait pas les choses "de manière angulaire" avec les modules - et n'enregistre à la place que le module ngRaven si vous avez appelé Raven.config() avec un DSN.

La méthode addPlugin() n'enregistre le module angulaire que si la configuration a été correctement configurée (par exemple avec une URL DSN définie).

Pour résoudre ce problème, nous avons fait en sorte que Raven.config().addPlugin().install() soit toujours exécuté même sur notre suite de tests, nous utilisons notre URL DSN normale, puis utilisons la méthode config.shouldSendCallback pour bloquer l'envoi à sentinelle dans l'environnement de test .

Cela permet à raven-js d'enregistrer correctement le module angulaire.

J'espère que cela pourra aider!

Nous faisons la même chose, mais nous passons un faux DSN à la place (c'est pour notre env de développement). Quelque chose comme https://[email protected]/1 fonctionne bien (le corbeau semble faire une certaine application sur les propriétés de l'URL, donc le nom d'utilisateur doit être présent avec le chemin).

Fermeture pour cause d'inactivité prolongée. Ce fil contient également quelques solutions de contournement au cas où. N'hésitez pas à rouvrir ce problème s'il est toujours d'actualité.

Cette page vous a été utile?
0 / 5 - 0 notes