如何为 node.js 中导出的 class 方法设置全局变量
How to set global variables for exported class methods in node.js
我有多个不同的文件像这样分解:
index.js
utils.js
ClassA/
index.js
base.js
utils 包含许多随处可用的实用函数。 ClassA/index.js 包含 ClassA 的构造函数以及 requires base.js,然后导出 ClassA。 Base.js 导出 ClassA 的原型方法。它们基本上是这样的:
//ClassA/index.js
function ClassA () {
//constructor stuff
}
ClassA.prototype.constructor = ClassA;
require('./base')(ClassA);
module.exports = ClassA;
//ClassA/base.js
module.exports = ClassA => {
ClassA.prototype.aMethod = function () {
log('hello');
}
//utils.js
module.exports = {
log : function (logText) {
//dostuff
}
}
所以我的问题是我无法从 ClassA/base.js
中的方法中访问日志功能。如果我在文件的顶部设置 const log = require('../utils').log
,它不起作用。如果我将同一行代码放在导出中但在方法定义之外,它也不起作用,但是如果我将它放在方法本身中它确实有效(如预期的那样,但这意味着复制任何 require 语句需要的方法)。有什么办法可以绕过这种混乱且重复的路线吗?
这是循环依赖的问题。我将 'log' 更改为 ClassA 的方法,这解决了问题。感谢 Francois P. 为我指明了正确的方向。
我有多个不同的文件像这样分解:
index.js
utils.js
ClassA/
index.js
base.js
utils 包含许多随处可用的实用函数。 ClassA/index.js 包含 ClassA 的构造函数以及 requires base.js,然后导出 ClassA。 Base.js 导出 ClassA 的原型方法。它们基本上是这样的:
//ClassA/index.js
function ClassA () {
//constructor stuff
}
ClassA.prototype.constructor = ClassA;
require('./base')(ClassA);
module.exports = ClassA;
//ClassA/base.js
module.exports = ClassA => {
ClassA.prototype.aMethod = function () {
log('hello');
}
//utils.js
module.exports = {
log : function (logText) {
//dostuff
}
}
所以我的问题是我无法从 ClassA/base.js
中的方法中访问日志功能。如果我在文件的顶部设置 const log = require('../utils').log
,它不起作用。如果我将同一行代码放在导出中但在方法定义之外,它也不起作用,但是如果我将它放在方法本身中它确实有效(如预期的那样,但这意味着复制任何 require 语句需要的方法)。有什么办法可以绕过这种混乱且重复的路线吗?
这是循环依赖的问题。我将 'log' 更改为 ClassA 的方法,这解决了问题。感谢 Francois P. 为我指明了正确的方向。