Sentry-javascript: 模块“ngRaven”不可用! 您拼错了模块名称或忘记加载它。 如果注册模块,请确保将依赖项指定为第二个参数。

创建于 2016-03-14  ·  23评论  ·  资料来源: getsentry/sentry-javascript

这是我在 karma.conf.js 中用于运行 karma jasmine uint 测试的文件顺序。

文件:['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'
]
事件虽然我包含了“app/bower_components/raven-js/plugins/angular.js”,但我收到错误,指出模块“ngRaven”不可用。

最有用的评论

哦,好吧,这实际上与 Angular 的方式背道而驰,我们通常在需要ngRaven的模块中进行这种配置,但这样做是不可能的。

我认为您应该在文档中指定它,因为它根本没有指定。

所有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”不可用! 您拼错了模块名称或忘记加载它。 如果注册模块,请确保将依赖项指定为第二个参数。

也许这只是对文档的误解?

有这方面的消息吗? 我觉得角插件只适用于CommonJS的,因为时候仅仅包括文件实际上是永远不会被调用。 请修复以便我们可以使用插件

以下是您的集成页面后最简单的示例,但它不起作用: https :

@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 - 鉴于人们一直在为此而绊倒,我可以合并。 尽管我担心有人可能会在 _before_ Angular 之前声明 Raven。 但至少 CDN 用户需要手动升级。

不要忘记在下面以粗体添加该位

掠夺
.config('https://@sentry.io/')
.addPlugin(Raven.Plugins.Angular)
。安装();

@theatrain除此之外,如果使用 gulp 注入或任何类似的自动将包依赖项包含到您的 html 中,您需要在您的 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但正确完成以考虑到丑化/缩小

还有一件事要注意,大多数配置可以稍后发生(尽管您在引导过程中错过了任何问题的标签)

例如,事后加载的 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,
      }
    });
  });

这事有进一步更新吗? 我们的 karma 测试套件也出现了问题。

@xeroxoid我们在业力测试期间也遇到了这个问题,并且能够解决它。

在我们的例子中,我们在测试环境中跳过了Raven.config().addPlugin().install()例程,因为我们不希望它们被发送到哨兵。

问题在于 raven-js 不会使用模块以“角度方式”进行操作 - 如果您使用 DSN 调用Raven.config() ,则只会注册ngRaven模块。

addPlugin()方法仅在配置设置正确的情况下注册 angular 模块(例如,使用定义的 DSN url)。

为了解决这个问题,我们使Raven.config().addPlugin().install()即使在我们的测试套件上也始终运行,我们使用普通的 DSN url,然后使用config.shouldSendCallback方法阻止发送到测试环境中的哨兵.

这允许 raven-js 正确注册 angular 模块。

希望有帮助!

我们正在做同样的事情,但我们传递了一个假的 DSN(这是我们的开发环境)。 像https://[email protected]/1这样的东西工作正常(raven 似乎对 URL 的属性做了一些强制执行,所以用户名必须与路径一起存在)。

由于长时间不活动而关闭。 该线程还包含一些解决方法,以防万一。 如果它仍然以任何方式相关,请随时重新打开此问题。

此页面是否有帮助?
0 / 5 - 0 等级