这是我在 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”不可用。
+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的,因为这时候仅仅包括文件实际上是永远不会被调用。 请修复以便我们可以使用插件
@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://
.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
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 的属性做了一些强制执行,所以用户名必须与路径一起存在)。
由于长时间不活动而关闭。 该线程还包含一些解决方法,以防万一。 如果它仍然以任何方式相关,请随时重新打开此问题。
最有用的评论
哦,好吧,这实际上与 Angular 的方式背道而驰,我们通常在需要
ngRaven
的模块中进行这种配置,但这样做是不可能的。我认为您应该在文档中指定它,因为它根本没有指定。