【问题标题】:Instrumenting files on the fly with Istanbul使用伊斯坦布尔即时检测文件
【发布时间】:2018-06-01 11:41:05
【问题描述】:

我可以像这样检测文件/文件夹并将其写入磁盘:

$ 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);
});

有谁知道这是否可行以及如何实现?

【问题讨论】:

    标签: node.js istanbul nyc


    【解决方案1】:

    其实是这样的。

    下面是一个示例,我只是截取对普通“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);
      });
    });
    

    【讨论】:

    • 您可以将数据通过管道传输到响应流,我认为您的意思是 res.write() 而不是 res.send()
    • 确实如此,尽管在上面的示例中它具有几乎相同的结果。但如前所述,这只是一个概念证明。关键是,如果你省略 --output 属性,伊斯坦布尔将在标准输出上生成输出,从而消除对文件持久性的需要
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 2016-04-05
    • 2023-03-11
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2019-11-02
    相关资源
    最近更新 更多