检查一个模块是否存在,如果是这样,用它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
,否则即使你还没有声明它,它仍然会引用被升起的本地console
variables:
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..');
你不能像这样覆盖全局console
。 var console
只是创build一个局部variables,影响全局console
,甚至不global.console = ...
将工作。
您可以单独覆盖console.log
等,也可以覆盖process.stdout.write
( console.log
内部使用的),这将允许您在较低级别挂接到stdout。 这也可以抓住任何可能直接使用process.stdout.write
。