【发布时间】:2021-02-18 18:21:19
【问题描述】:
我在几个节点模块中使用 Sentry。我在admin.js中初始化它:
// admin.js
const Sentry = require('@sentry/node');
Sentry.init({
dsn: functions.config().sentry.dsn,
environment: functions.config().env.mode,
});
module.exports = { Sentry };
我知道节点是“需要一次”(第一次后缓存)并在此之后返回相同的对象,因此多个要求表现为一个要求。
我的问题与这些 require 语句的运行顺序有关,以及我是否应该在其他模块中使用下面的选项 #1 或 #2(或者是否重要):
// utils.js
// option #1
const Sentry = require('@sentry/node');
testFn () {
try {
throw new Error();
} catch (err) {
Sentry.captureException(err);
}
}
// utils.js
// option #2
const { Sentry } = require('./admin');
testFn () {
try {
throw new Error();
} catch (err) {
Sentry.captureException(err);
}
}
如果我使用选项#1,当调用captureException 时,Sentry 是否有可能无法在utils.js 中正确初始化?
如果这两个选项都有效,那么就最佳实践而言,一个比另一个更受欢迎吗?
【问题讨论】:
-
只有选项 2 是正确的。
admin未在选项 1 中导入。 -
谢谢。要清楚,您是说虽然哨兵在 admin.js 中被初始化,但如果使用选项 1,哨兵将无法在 utils.js 中工作?
-
如果在导入 utils 的模块中未在 utils 之前导入 admin,则不会,如果 admin 是,则不会。这种不确定性表明存在问题。如果 utils 依赖于 admin 的代码并且需要它正常工作,它应该显式地导入它。
-
这正是我需要知道的。这很有意义。非常感谢!
标签: javascript node.js firebase google-cloud-functions sentry