2014-03-02 136 views
2

使用節點npm模塊(https://www.npmjs.org/api/npm.html),我想檢索一個包但沒有將結果打印到控制檯。設置日誌級別無聲似乎沒有幫助。阻止NodeJS npm在檢索包時打印詳細信息

var npm = require('npm'); 
npm.load(function (er, npm) { 
    // use the npm object, now that it's loaded. 

    npm.config.set('loglevel', 'silent'); 

    npm.commands.view(["<package>@<version>"],function(err, npmBody) { 
    //at this point it is always logging npmBody contents to console! 
    }); 

}); 
+0

你嘗試通過在初始配置例如設置'npm.load({loglevel:'silent'},function(er,npm){...});'和/或捕獲日誌事件'npm.on(「log」,function(message){.. 。})?我必須用完或自己測試它。 –

回答

2

這離不開劫持stdout來完成。請參閱:https://github.com/npm/npm/blob/master/lib/install.js#L100

這已修復一次,但後來恢復。看起來npm不是爲了以編程方式使用而設計的。

通過「劫持stdout」我的意思是這樣的:

console.log('Begin'); 

console._stdout = { write : function() {} }; 

externalFn(); 

console._stdout = process.stdout; 

console.log('End'); 



function externalFn() { 
    console.log('Annoying stuff'); 
} 
+0

感覺很糟糕,但它工作:) – jlarson