Sentry-javascript: O módulo 'ngRaven' não está disponível! Você digitou incorretamente o nome do módulo ou esqueceu de carregá-lo. Se registrar um módulo, certifique-se de especificar as dependências como o segundo argumento.

Criado em 14 mar. 2016  ·  23Comentários  ·  Fonte: getsentry/sentry-javascript

Este é o meu pedido de arquivos em karma.conf.js para executar testes de uint do karma jasmine.

arquivos: ['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'
]
Embora tenha incluído 'app / bower_components / raven-js / plugins / angular.js', estou recebendo o erro informando que o módulo 'ngRaven' não está disponível.

Comentários muito úteis

Ok, isso na verdade vai contra a maneira Angular, onde normalmente fazemos esse tipo de configuração em um módulo que exigiria ngRaven , mas fazer dessa forma torna isso impossível.

Acho que você deve especificar isso na documentação, pois não é especificado de forma alguma.

Todos 23 comentários

+1

Existe algo acionável que podemos fazer aqui? Estou um pouco confuso. :)

Oh, jk, eu li o Stackoverflow. Funciona com o pacote angular-raven, mas não com o nosso.

De acordo com a documentação atual, o plugin sentry angular agora deve funcionar

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

Pode ser o diretório 'dist' ausente em 'app / bower_components / raven-js / plugins / angular.js'?

De acordo com os documentos [https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower], deve ser:

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

Seguindo a documentação, o angular não consegue encontrar o módulo para mim. A solução de estouro de pilha funciona para mim.

Pode ser o diretório 'dist' ausente em 'app / bower_components / raven-js / plugins / angular.js'?

Isso definitivamente funcionaria.

Se alguém aqui pudesse me dar um exemplo concreto, ficaria feliz em me aprofundar nisso.

@benvinegar https://plnkr.co/edit/S1Dk9t?p=preview esta é uma amostra simples do erro,

Com base em https://github.com/getsentry/raven-js/blob/master/docs/integrations/angular.rst
Diz:
_Observe que esta compilação de CDN inicializa automaticamente o plug-in Angular._

Mas importar apenas isso, como diz a documentação, gera um erro, verifique o log no plnkr
[$ injector: nomod ] Módulo 'ngRaven' não está disponível! Você digitou incorretamente o nome do módulo ou esqueceu de carregá-lo. Se registrar um módulo, certifique-se de especificar as dependências como o segundo argumento.

Talvez seja apenas uma má interpretação dos documentos?

Alguma novidade sobre isso? Acho que o plugin angular só funciona para CommonJs, uma vez que ele nunca é chamado apenas ao incluir o arquivo. Corrija para que possamos usar o plugin

Aqui está o exemplo mais simples após sua página de integração que não funciona: https://plnkr.co/edit/M5nt6Y?p=preview

@RobertBaron @mebibou - em ambos os exemplos, você precisa configurar o Raven antes de inicializar seu aplicativo. Os plug-ins não são inicializados até que Raven.install() seja chamado.

Isso está em todos os exemplos de documentação , por exemplo:

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

Embora pudesse ser mais explícito que o script do seu aplicativo (por exemplo, app.js ) deve vir depois.

Ok, isso na verdade vai contra a maneira Angular, onde normalmente fazemos esse tipo de configuração em um módulo que exigiria ngRaven , mas fazer dessa forma torna isso impossível.

Acho que você deve especificar isso na documentação, pois não é especificado de forma alguma.

+1

Veja # 413, @benvinegar Está pronto para enfrentar?

@Sija - visto que as pessoas continuam tropeçando nisso, estou bem com a fusão. Embora eu esteja preocupado com o caso em que alguém possa ter declarado Raven _antes_ Angular. Mas pelo menos os usuários do CDN precisam fazer a atualização manualmente.

Não se esqueça de adicionar a parte em negrito abaixo

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

@theatrain além disso, você precisa adicionar uma substituição em seu package.json se estiver usando gulp inject ou qualquer coisa semelhante que inclua dependências de pacotes em seu html automaticamente.
O seguinte abaixo foi a minha solução, já que eu uso o gulp-inject

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

Também encontrei uma boa solução alternativa para o grunhido, já que tudo estava feio e reduzido:

Meu app.js parecia:

'use strict';

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

Fiz outro arquivo chamado raven.js

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

E no index.html em vez de scripts embutidos:

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

Agora, quando eu grunt build:dist que aumenta / diminui, o Grunt otimizará meu script para que o plugin possa ser registrado. Fazer scripts embutidos não causará a otimização, portanto, window.angular não será adequado para que o plug-in se carregue automaticamente.

No geral, o fluxo é o seguinte (a documentação está correta)

  • trazer angular
  • trazer raven
  • trazer raven/plugins/angular.js
  • config / addPlugin / install ngRaven mas feito corretamente para levar em conta a uglificação / minimização

Outra coisa a notar que a maioria das configurações pode acontecer mais tarde (embora você perca as tags em quaisquer problemas durante o bootstrap)

Por exemplo, uma configuração de heroku carregada após o fato.

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

alguma atualização disso? Também temos problemas aqui com nosso conjunto de testes de carma.

@xeroxoid Também tivemos problemas com isso durante os testes de carma e fomos capazes de contornar isso.

Em nosso caso, estávamos pulando a rotina Raven.config().addPlugin().install() no ambiente de teste porque não queríamos que fossem enviados para o sentinela.

O problema com isso é que raven-js não faz as coisas "do jeito angular" com os módulos - ao invés disso, só registra o módulo ngRaven se você chamou Raven.config() com um DSN.

O método addPlugin() só registra o módulo angular se a configuração foi configurada corretamente (por exemplo, com um url DSN definido).

Para corrigir isso, fizemos com que Raven.config().addPlugin().install() seja sempre executado, mesmo em nosso conjunto de testes, usamos nosso url DSN normal e, em seguida, usamos o método config.shouldSendCallback para bloquear o envio para sentinela no ambiente de teste .

Isso permite que raven-js registre corretamente o módulo angular.

Espero que ajude!

Estamos fazendo o mesmo, mas, em vez disso, passamos um DSN falso (para nosso env dev). Algo como https://[email protected]/1 funciona bem (o raven parece fazer alguma imposição nas propriedades da URL, então o nome de usuário deve estar presente junto com o caminho).

Fechando devido à longa inatividade. Este tópico também contém algumas soluções alternativas para o caso. Sinta-se à vontade para reabrir este problema se ainda for relevante de alguma forma.

Esta página foi útil?
0 / 5 - 0 avaliações