收集纱线指标

问题描述

我想收集有关完成 yarn 命令(例如 yarn install)需要多长时间的指标以及其他指标(例如命令未成功完成的频率)。

我的 .yarnrc 文件如下所示:

registry "https://artifactory-content.company.build/artifactory/api/npm/npm"
"--ignore-engines" true
"@sail:registry" "https://artifactory-content.company.build/artifactory/api/npm/npm-local"
"@company-internal:registry" "https://artifactory-content.company.build/artifactory/api/npm/npm-local"
lastUpdateCheck 1617811239383
yarn-path "./yarn-1.19.1.js"

据我所知,当我运行 yarn 命令时,它会调用 yarn-1.19.1.js 文件。是否可以创建一个包装器,以便在运行任何纱线命令时,它会在命令级别记录指标,然后执行 yarn-1.19.1.js 文件

我遇到的另一种方法修改 package.json 文件并覆盖前面提到的命令 here 但这似乎不可扩展,因为以后可能会添加新命令。

解决方法

是的,您可以创建一个调用 Yarn 核心库的包装器脚本。这正是 yarn 的 Node.js 所做的:

#!/usr/bin/env node
'use strict';

var ver = process.versions.node;
var majorVer = parseInt(ver.split('.')[0],10);

if (majorVer < 4) {
  console.error('Node version ' + ver + ' is not supported,please use Node.js 4.0 or higher.');
  process.exit(1);
} else {
  try {
    require(__dirname + '/../lib/v8-compile-cache.js');
  } catch (err) {
  }

  var cli = require(__dirname + '/../lib/cli');
  if (!cli.autoRun) {
    cli.default().catch(function(error) {
      console.error(error.stack || error.message || error);
      process.exitCode = 1;
    });
  }
}

您可以像这样编辑该脚本:

  const start = Date.now();

  var cli = require(__dirname + '/../lib/cli');
  if (!cli.autoRun) {
    cli.default()
      .then(function() {
        const durationInMs = Date.now() - start;
        // It succeeded,do your stuff.
      })
      .catch(function(error) {
        console.error(error.stack || error.message || error);
        process.exitCode = 1;
        
        const durationInMs = Date.now() - start;
        // It failed,do your stuff.
    });
  }