Node.js 如何在父级不’;你不能关上水管吗?

Node.js 如何在父级不’;你不能关上水管吗?,node.js,Node.js,我开发了一个名为transpile的包,将多个标记文件转换为单个JSON文件 运行transfile md to json--src examples/content--watch将标记文件转换为json,并在创建、编辑和删除标记文件时将结果输出到stdout 我尝试使用捕获JSON并使用另一个节点脚本进一步处理它 transpile-md-to-json --src src/privacy-guides --blogify --watch | node test.js 问题是stdin。启用

我开发了一个名为transpile的包,将多个标记文件转换为单个JSON文件

运行
transfile md to json--src examples/content--watch
将标记文件转换为json,并在创建、编辑和删除标记文件时将结果输出到
stdout

我尝试使用捕获JSON并使用另一个节点脚本进一步处理它

transpile-md-to-json --src src/privacy-guides --blogify --watch | node test.js
问题是
stdin。启用监视模式(
--watch
)时,
transfile md to json
未关闭管道,因此不会触发on('end')


如何解决这个问题?

正如Mike在评论中指出的那样,似乎没有内置的方法来实现这一点,因为管道在父管道退出之前保持打开状态,因此,
stdin.on('end')
不会被触发

我们能得到的最接近的方法是使用某种指标,并以此结束一个“周期”。我们可以钩住的指标并不总是存在,但在JSON上下文中,每个JSON有效负载都以
}
结尾,这就很好了

const readline=require(“readline”)
常数fs=要求(“fs”)
过程标准设置编码(“utf-8”)
const rl=readline.createInterface({
输入:process.stdin,
})
var json=“”
rl.on(“线路”,功能(线路){
json+=`${line}\n`
如果(行==“}”){
log(“完成”,json)
fs.writeFileSync(“test.json”,json)
json=“”
}
})

听起来你想为此提交功能请求,那么?如果按照设计,它没有发出
end
,请请求一个运行时标志,使它发出
end
的信号,你说的@Mike'Pomax'Kamermans是什么意思?我试图找出如何读取
transfile md to json
stdout
,但不是逐行读取,而是作为一个整体读取,但我不知道如何实现这一点(如果可能的话),因为
transfile md to json
不会在管道完好无损的情况下退出,并让调用
transfile md to json
,而不使用
--watch
标志。Chokidar的存在明确地用于监视文件和“在文件更改时触发事件”,通常为您提供更多的控制。(如果你想使用npm脚本做任何事情,还有一个
chokidar cli
,这是非常合理的)Mike'Pomax'Kamermans的良好直觉
transfile md to json
已经使用了
chokidar
,并且有一个功能可以输出到文件,而不是
stdout
。话虽如此,我还是在努力发现stdin的局限性。除非
transfile md to json
发出某种定制的EOF代码,您可以随时留意。