Sentry-javascript: Модуль ngRaven недоступен! Вы либо неправильно написали имя модуля, либо забыли его загрузить. При регистрации модуля убедитесь, что вы указали зависимости в качестве второго аргумента.

Созданный на 14 мар. 2016  ·  23Комментарии  ·  Источник: getsentry/sentry-javascript

Это мой порядок файлов в karma.conf.js для запуска тестов karma jasmine uint ..

файлы: ['app / bower_components / jquery / dist / jquery.min.js',
'приложение / bower_components / angular / angular.min.js',
'приложение / bower_components / raven-js / dist / raven.js',
'приложение / bower_components / raven-js / plugins / angular.js'
]
Событие, хотя я включил «app / bower_components / raven-js / plugins / angular.js», я получаю сообщение об ошибке, в котором говорится, что модуль «ngRaven» недоступен.

Самый полезный комментарий

О, хорошо, это на самом деле идет вразрез со способом Angular, где мы обычно делаем такую ​​конфигурацию в модуле, который требует ngRaven , но это делает невозможным.

Я думаю, вам следует указать это в документации, поскольку это вообще не указано.

Все 23 Комментарий

+1

Что мы можем здесь сделать? Я немного запутался. :)

Ой, я читал Stackoverflow. Он работает с пакетом angular-raven, но не с нашим.

Согласно текущей документации, плагин sentry angular теперь должен работать.

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

Может быть, каталог dist отсутствует в app / bower_components / raven-js / plugins / angular.js?

Согласно документам [https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower] это должно быть:

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

Следуя документации, angular не может найти модуль для меня. Однако решение переполнения стека работает для меня.

Может быть, каталог dist отсутствует в app / bower_components / raven-js / plugins / angular.js?

Это определенно сработает.

Если бы кто-нибудь из присутствующих мог предоставить мне конкретный пример, я был бы рад разобраться в этом.

@benvinegar https://plnkr.co/edit/S1Dk9t?p=preview это простой образец ошибки,

На основе https://github.com/getsentry/raven-js/blob/master/docs/integrations/angular.rst
Он говорит:
_ Обратите внимание, что эта сборка CDN автоматически инициализирует плагин Angular. _

Но импорт только того, что, как говорится в документации, вызывает ошибку, проверьте журнал в plnkr
[$ injector: nomod ] Модуль ngRaven недоступен! Вы либо неправильно написали имя модуля, либо забыли его загрузить. При регистрации модуля убедитесь, что вы указали зависимости в качестве второго аргумента.

Может это просто неверное толкование документации?

Есть новости по этому поводу? Я думаю , что угловой плагин работает только для CommonJS, так как это не на самом деле никогда не вызывается , когда только включая файл. Пожалуйста, исправьте, чтобы мы могли использовать плагин

Вот простейший пример после вашей страницы интеграции , который не работает: https://plnkr.co/edit/M5nt6Y?p=preview

@RobertBaron @mebibou - в обоих примерах вам нужно настроить Raven перед инициализацией вашего приложения. Плагины не инициализируются до вызова Raven.install() .

Это есть во всех примерах документации , например:

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

Хотя можно было бы сделать более явным, что сценарий вашего приложения (например, app.js ) должен появиться позже.

О, хорошо, это на самом деле идет вразрез со способом Angular, где мы обычно делаем такую ​​конфигурацию в модуле, который требует ngRaven , но это делает невозможным.

Я думаю, вам следует указать это в документации, поскольку это вообще не указано.

+1

См. # 413, @benvinegar. Готово ли оно к борьбе?

@Sija - учитывая, что люди продолжают

Не забудьте добавить полужирный шрифт ниже

Ворон
.config ('https: //@ sentry.io /')
.addPlugin (Raven.Plugins.Angular)
.установить();

@theatrain помимо этого вам нужно добавить переопределение в свой package.json, если вы используете
Следующее ниже было моим исправлением, так как я использую gulp -inject

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

Я также нашел хороший обходной путь для grunt, так как все было урезано и уменьшено:

Мой app.js выглядел так:

'use strict';

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

Я создал еще один файл с названием raven.js

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

И в index.html вместо встроенных скриптов:

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

Теперь, когда я grunt build:dist который искажает / минимизирует, grunt оптимизирует мой скрипт, чтобы можно было зарегистрировать плагин. Выполнение встроенных скриптов не приведет к оптимизации, поэтому window.angular не подходит для автозагрузки плагина.

В целом поток выглядит следующим образом (документация верна)

  • принести angular
  • принести raven
  • принести raven/plugins/angular.js
  • config / addPlugin / install ngRaven но все сделано правильно, чтобы учесть уменьшение / уменьшение

Также следует отметить, что большинство конфигураций может произойти позже (хотя вы пропускаете теги при любых проблемах во время начальной загрузки)

Например конфиг героку загружается постфактум.

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

Есть новости по этому поводу? Также есть проблемы с нашим набором тестов кармы.

@xeroxoid У нас тоже были проблемы с этим во время тестов кармы, и мы смогли их обойти.

В нашем случае мы пропускали процедуру Raven.config().addPlugin().install() в тестовой среде, потому что не хотели, чтобы они отправлялись на стражу.

Проблема заключается в том, что raven-js не работает с модулями "угловым способом" - а вместо этого регистрирует модуль ngRaven случае, если вы вызвали Raven.config() с DSN.

Метод addPlugin() регистрирует модуль angular только в том случае, если конфигурация была настроена правильно (например, с определенным URL-адресом DSN).

Чтобы исправить это, мы сделали так, что Raven.config().addPlugin().install() всегда запускается даже в нашем тестовом наборе, мы используем наш обычный URL-адрес DSN, а затем используем метод config.shouldSendCallback чтобы заблокировать отправку на часовой в тестовой среде .

Это позволяет raven-js правильно зарегистрировать модуль angular.

Надеюсь, это поможет!

Мы делаем то же самое, но вместо этого передаем поддельный DSN (это для нашего dev env). Что-то вроде https://[email protected]/1 работает нормально (похоже, что raven применяет некоторую степень принуждения к свойствам URL-адреса, поэтому имя пользователя должно присутствовать вместе с путем).

Закрытие из-за длительного бездействия. В этой ветке также есть несколько обходных путей на всякий случай. Не стесняйтесь повторно открыть этот вопрос, если он по-прежнему актуален.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги