问题描述
我想收集有关完成 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.
});
}