2013-11-09 2 views
0

Я хотел бы использовать параметр stdin этой функции: http://graspjs.com/docs/lib/.Переменная строки в интерфейс stdin

Функция grasp ожидает, что этот параметр будет объектом с тем же интерфейсом, что и process.stdin. И у меня есть простая переменная в памяти типа string.

Как передать эту переменную на вход stdin этой функции?

var grasp = require('grasp'); 
var sourceCode = 'if (condititon) { console.log("In the condition"); }'; 

grasp({ 
    args: '--equery condititon --replace true', 
    stdin: SomethingLikeStringToStdin(sourceCode), 
    callback: console.log 
}); 

Ожидаемый журнал:

if (true) { console.log("In the condition"); } 

ответ

1

process.stdin является Readable Stream. Что такое grasp expects - это поток, с которого он может считывать данные. Чтобы имитировать это поведение, вы можете использовать поток PassThrough: это поток, в который вы можете записывать строки буфера, и который будет выдавать эти данные, как и любой читаемый поток.

Вот пример использования:

var stream = require('stream'); 
var passthrough = new stream.PassThrough(); 

grasp({ stdin: passthrough }); 
passthrough.push('some data'); 
passthrough.push('some other data'); 
passthrough.end(); 
+0

Спасибо! Он работает так, как ожидалось. – mquandalle

2

С Возьмитесь 0.2.0, теперь вы можете использовать новый input параметр при использовании Возьмитесь в качестве библиотеки, или использовать один из двух новых вспомогательных функций: grasp.search и grasp.replace. Это позволит вам делать то, что вы хотите, не создавая поддельный StdIn.

Документация: http://graspjs.com/docs/lib/

+0

Благодарим вас за эту новую функциональность @gkz :-) – mquandalle

Смежные вопросы