javascript - 覆盖 Node 中的默认值 'console' 是否存在任何真正的危险?

标签 javascript node.js

我是一个习惯驱动的生物,而 console.log/console.error/etc 恰好是我本能地用来打印东西的东西。但是,我正在尝试将我所有的登录 Node 都驱动到“winston”。我更喜欢在我的文件顶部做一些像 var console = require('./modules/logger'); 这样的事情,然后像往常一样使用 console.whatever ..利用额外的参数根据需要(否则 api 几乎相同)。由于这是本地化到我正在使用的文件而不是某种全局更改,因此将“控制台”设置为该模块的导出是否有任何危险?而不仅仅是“好吧,这可能会让其他人感到困惑”。

我确实注意到了 this question弹出一个类似的问题,但它并没有真正回答它背后是否存在危险。还有一些其他问题询问您是否可以覆盖 Node 的一些核心,但我没有这样做 - 我只是使用与“魔术”全局相同的名称进行本地引用。

最佳答案

除了可能以非标准(即意外)方式覆盖现有控制台功能外,我认为用您自己的对象替换全局控制台没有任何危险,只要它提供所有预期的功能和调用约定(功能签名)作为默认控制台。我已经做过很多次了,没有问题。

如果您在全局控制台上使用与其他代码预期不同的签名为现有函数提供一些非标准实现,您一定会遇到问题。

如果您在模块或函数范围内进行替换,则只会影响该范围内的引用。

关于javascript - 覆盖 Node 中的默认值 'console' 是否存在任何真正的危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20369342/

相关文章:

javascript - 如何使用Mongoose使用MongoDB事务?

node.js - 如何在 nodejs 应用程序中使用 kubernetes secrets?

javascript - 着陆页有延迟然后自动向下滚动

javascript - 模态框不适用于所有引用

javascript - 客户端浏览器可以在我们的网站上添加JavaScript吗?

node.js - 如何同步 Mongoose 和远程Elasticsearch

node.js - Angular 7 : Uncaught ReferenceError: global is not defined when adding package

node.js - 如何在中间件拦截 'session.conversationData' hook的同时访问 'send'?

javascript - 将输入字段焦点上的标签设置为完全不透明

javascript - 这个 Javascript 创建了什么类型的对象?