检查一个模块是否存在,如果是这样,用它replace控制台,否则不。 不工作,控制台得到未定义

我正在使用爬 ,我用它replaceconsole对象。 但是,如果模块存在,我只想replace它。

 try { var console = require('clim')(); } catch(err) {} console.log('checking..'); 

如果模块不存在,则会使console未定义。

奇怪的是,保存控制台对象并replace也不起作用

 var console_backup = console; try { var console = require('clim')(); } catch(err) { if (err) var console = console_backup; } console.log('checking..'); 

仍然抛出错误( console未定义),当clim不存在。

http://runnable.com/U8vlFEpIYtkiV2N9/24850946-console-for-node-js

只有在存在的情况下,如何使工作更换console

你的第二次尝试是接近的,但是当你设置console_backup时候,你需要明确的标识你想要引用全局console ,否则即使你还没有声明它,它仍然会引用被升起的本地consolevariables:

 var console_backup = global.console; try { var console = require('clim')(); } catch(err) { if (err) var console = console_backup; } console.log('checking..'); 

或简化为:

 try { var console = require('clim')(); } catch(err) { if (err) console = global.console; } console.log('checking..'); 

你不能像这样覆盖全局consolevar console只是创build一个局部variables,影响全局console ,甚至不global.console = ...将工作。

您可以单独覆盖console.log等,也可以覆盖process.stdout.writeconsole.log内部使用的),这将允许您在较低级别挂接到stdout。 这也可以抓住任何可能直接使用process.stdout.write

Interesting Posts