有一个模块。它是记录器。它使用标签来显示消息的来源。像这样:
require('mymodule')('tag');
其代码如下:
let place = null;
const l = function (text) {
process.stdout.write(place + text);
}
module.exports = function (where) {
place = where;
return l;
}
然后我需要一些功能。我需要将一条消息始终保留在控制台的底部。因此,我创建了一个类似l.hold('my_message')的函数。 它会覆盖发送到“ l”的所有输出,并始终将消息保留在底部。 它工作得很好。但是仅当仅从一个文件调用此模块时。但是,当我从其他文件(当然使用不同的标签)使用此模块时,l.hold仅覆盖调用该文件的文件的输出,而不覆盖其他文件的输出。据我了解,发生这种情况是因为创建了模块的不同实例,每个文件调用一个实例。 而且,我想我需要使用类似单例的东西。我做了类似
module.exports = {
tag (place) {
function logger (...text) {
l(place, ...text);
}
logger.error = l.error.bind(null, place);
logger.debug = l.debug.bind(null, place);
logger.info = l.info.bind(null, place);
logger.warn = l.warn.bind(null, place);
logger.hold = l.hold;
logger.stop = l.stop;
return logger;
}
}
但是它没有提供所需的结果。那么该怎么办?任何帮助将不胜感激。提前谢谢。