如何测量 npm/yarn task/script 的执行时间?

How can I measure the execution time of a npm/yarn task/script?

如何在不修改脚本的情况下在命令行上测量 npm/yarn 任务的执行时间。

在我的特殊用例中,我想执行现有的 E2E-Tes​​t (yarn test:e2e) 100 次并取平均值。

你可以使用 npm 包 gnomon:

一个命令行实用程序,有点像 moreutils 的 ts,用于将时间戳信息添加到另一个命令的标准输出中。

这样安装:

$ npm i -g gnomon

有了这个你可以运行:

$ yarn install | gnomon

它可能会给你这样的输出:

$ yarn install | gnomon 
   0.5327s   yarn install v1.9.4
   1.9652s   [1/4] Resolving packages...
   0.0160s   success Already up-to-date.
   0.0163s   Done in 2.38s.
   0.0003s   

     Total   2.5315s

如果您不想要任何全局甚至本地依赖项,或者您不想要只能在 unixy 操作系统上运行的东西,这几乎可以通过一个简单的 .js 文件和一个同样简单的文件轻松实现npm 脚本细化:

{
  ...
  "scripts: {
    "time": "node mark.js",
    "start": "npm run time && ...whatever 'start' was before... && npm run time",
  },
  ...
}

有了那个 mark.js 文件,下面的代码几乎是微不足道的:

const fs = require("fs"); // or import fs from "fs"; if you're working on modern JS

const timingFile = `.timing`;

if(fs.existsSync(timingFile)) {
  const end = Date.now();
  const start = fs.readFileSync(timingFile);
  fs.unlinkSync(timingFile);
  console.log(`Runtime: ${(end - start)/1000}s`);
} else { fs.writeFileSync(timingFile, `${Date.now()}`, `utf8`); }

在unix中使用以下命令

time npm run build

对于 windows 使用此命令

Measure-Command { start-process npm 'run build' -wait}