使用伊斯坦布尔即时检测文件

时间:2017-12-19 04:46:46

标签: node.js istanbul nyc

我可以检测文件/文件夹并将其写入磁盘,如下所示:

$ istanbul instrument public --output public-coverage  --embed-source true

但是我想知道是否有办法即时检测文件并将它们提供给浏览器而无需将检测文件写入磁盘。像这样:

app.use(function(req,res,next){
    const file = req.path; // whatever
    const k = cp.spawn('istanbul', ['instrument']);
    fs.createReadStream(file).pipe(k.stdin).pipe(res);
});

有人知道这是否可能以及如何?

1 个答案:

答案 0 :(得分:0)

实际上是。

下面是一个示例,其中我只是截取了对常规“ main.js”文件的请求,而是返回“ instrumented”版本。 只是概念证明,没有任何错误处理,仅针对特定文件,但是我想您明白了。

或者,您可以在代码“ require(“ istanbul”)”中加载instanbul并执行操作,而无需实际生成

app.get("/main.js", (req, res, next) => {
  const cmd = path.join(__dirname, "node_modules", ".bin", "istanbul");
  const file = path.join(__dirname, "public/main.js");
  const s = spawn(cmd, ["instrument", file, "--embed-source", "--no-compact", "--preserve-comments"]);

  s.stdout.on("data", (data) => {
    res.send(data);
  });
});