node.js - 当父级不关闭管道时如何从标准输入捕获 JSON?
问题描述
我开发了一个名为transpile-md-to-json的包,它将多个 markdown 文件转换为单个 JSON 文件。
运行transpile-md-to-json --src examples/content --watch
将 markdown 文件转换为 JSON,并将结果输出到stdout
markdown 文件的创建、编辑和删除。
我尝试使用get-stdin捕获 JSON 并使用另一个节点脚本对其进行更多处理。
transpile-md-to-json --src src/privacy-guides --blogify --watch | node test.js
问题永远不会被触发,因为在启用监视模式时stdin.on('end')
管道没有关闭( )。transpile-md-to-json
--watch
见https://github.com/sindresorhus/get-stdin/blob/master/index.js#L23-L25
我该如何解决这个问题?
解决方案
正如 Mike 在评论中指出的那样,似乎没有内置的方法来实现这一点,因为管道在父级退出之前一直保持打开状态,因此stdin.on('end')
不会被触发。
我们能得到的最接近的是使用某种EOF指标并用它来结束一个“循环”。我们可以挂钩的指标并不总是存在,但在 JSON 的上下文中,我们很好,因为每个 JSON 有效负载都以}
.
const readline = require("readline")
const fs = require("fs")
process.stdin.setEncoding("utf-8")
const rl = readline.createInterface({
input: process.stdin,
})
var json = ""
rl.on("line", function(line) {
json += `${line}\n`
if (line === "}") {
console.log("done", json)
fs.writeFileSync("test.json", json)
json = ""
}
})
推荐阅读
- c# - 实体框架 - 在包含后使用 where() 过滤行
- firebase - Flutter Firebase Crashlytics 将堆栈跟踪报告为 Java 类文件而不是 Dart 文件
- node.js - 当 NPM 出现故障时,有什么方法可以避免停机?(在这种情况下与 GC App Engine 部署有关)
- django - Django 连接到 IBM Cloud 数据库
- javascript - 对象数组如何检查深度嵌套的文本字符串重复项并从数组中删除?
- react-native - Emailvalidator (require("email-validator") 停止工作
- java - Maven下载特定版本,如何强制下载其他版本?
- python - Pandas:应用返回多行多列的函数
- 3d-modelling - 如何在 webbots 中制作复杂的机器人模型?
- apache-kafka - errors.deadletterqueue.topic.name 是否适用于源连接器