Sentry-javascript: モジュール「ngRaven」は使用できません! モジュール名のスペルを間違えたか、ロードするのを忘れました。 モジュールを登録する場合は、2番目の引数として依存関係を指定していることを確認してください。

作成日 2016年03月14日  ·  23コメント  ·  ソース: getsentry/sentry-javascript

これは、karma jasmineuintテストを実行するためのkarma.conf.js内のファイルの順序です。

ファイル:['app / bower_components / jquery / dist / jquery.min.js'、
'app / bower_components / angle / angle.min.js'、
'app / bower_components / raven-js / dist / raven.js'、
'app / bower_components / raven-js / plugins / angle.js'
]
'app / bower_components / raven-js / plugins / angle.js'を含めましたが、モジュール 'ngRaven'が利用できないというエラーが表示されます。

最も参考になるコメント

ああ、これは実際には、 ngRavenを必要とするモジュールでこの種の構成を通常行うAngularの方法に反しますが、この方法を行うと不可能になります。

まったく指定されていないので、ドキュメントで指定する必要があると思います。

全てのコメント23件

+1

ここでできる実用的なことはありますか? 私は少し混乱しています。 :)

ああ、jk、Stackoverflowを読んだ。 それはangular-ravenパッケージで動作しますが、私たちのものでは動作しません。

現在のドキュメントによると、歩哨角度プラグインが機能するはずです

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

'app / bower_components / raven-js / plugins /angular.js'にディレクトリ 'dist'がない可能性がありますか?

ドキュメント[https://docs.getsentry.com/hosted/clients/javascript/integrations/angular/#bower]によると、次のようになります。

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

ドキュメントに従って、Angularはモジュールを見つけることができません。 しかし、スタックオーバーフローソリューションは私にとってはうまくいきます。

'app / bower_components / raven-js / plugins /angular.js'にディレクトリ 'dist'がない可能性がありますか?

それは間違いなくそれを行うでしょう。

ここの誰かが私に具体的な例を提供してくれるなら、私はこれを掘り下げて喜んでいるでしょう。

@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'は使用できません! モジュール名のスペルを間違えたか、ロードするのを忘れました。 モジュールを登録する場合は、2番目の引数として依存関係を指定していることを確認してください。

たぶん、これはドキュメントの単なる誤解ですか?

これに関するニュースはありますか? AngularプラグインはCommonJでのみ機能すると思います。これは、ファイルを含めるだけでは実際には呼び出されないためです。 プラグインを使用できるように修正してください

@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 )を後で指定する必要があることをより明確にすることもできます。

ああ、これは実際には、 ngRavenを必要とするモジュールでこの種の構成を通常行うAngularの方法に反しますが、この方法を行うと不可能になります。

まったく指定されていないので、ドキュメントで指定する必要があると思います。

+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"
            ]
        }
    },

すべてが醜くなり、縮小されたので、私はうなり声の良い回避策も見つけました:

私の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がスクリプトを最適化して、プラグインを登録できるようになります。 インラインスクリプトを実行しても最適化は行われないため、window.angularはプラグインがそれ自体を自動ロードするのに適切ではありません。

全体的なフローは次のとおりです(ドキュメントは正しいです)

  • angular持ち込む
  • raven持ち込む
  • raven/plugins/angular.js持ち込む
  • config / addPlugin / install ngRavenが、醜化/縮小を考慮して適切に実行されています

また、ほとんどの構成は後で発生する可能性があることに注意してください(ただし、ブートストラップ中の問題でタグを見逃します)

たとえば、事後にロードされたheroku構成。

'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がモジュールに対して「角度のある方法」で処理を行わないことです。代わりに、DSNでRaven.config()を呼び出した場合にのみ、 ngRavenモジュールを登録します。

addPlugin()メソッドは、構成が正しく設定されている場合(たとえば、定義されたDSN URLを使用)にのみAngularモジュールを登録します。

これを修正するために、テストスイートでもRaven.config().addPlugin().install()が常に実行されるようにし、通常のDSN URLを使用してから、 config.shouldSendCallbackメソッドを使用してテスト環境で歩哨への送信をブロックします。 。

これにより、raven-jsはAngularモジュールを適切に登録できます。

お役に立てば幸いです。

同じことを行っていますが、代わりに偽のDSNを渡します(これは開発環境用です)。 https://[email protected]/1ようなものは正常に機能します(レイヴンはURLのプロパティに対してある程度の強制を行うように見えるため、ユーザー名がパスとともに存在する必要があります)。

長時間の非アクティブのために終了します。 このスレッドには、万が一の場合に備えて、いくつかの回避策も含まれています。 それでも何らかの形で関連性がある場合は、この問題を再開してください。

このページは役に立ちましたか?
0 / 5 - 0 評価