我需要在每个命令运行之前运行一些代码,使用命令的名称。我在 yargs api 文档中找不到任何内容。
具体来说,我想删除我的每个命令创建的缓存。例如命令foo
,在 中创建一个缓存./.tmp/foo
。我只想在每次运行之前删除该缓存。我可以从每个命令回调中删除它,但很好奇是否有更编程的方式来做到这一点。
yargs 是否有任何我可以用来完成此任务的功能?
我需要在每个命令运行之前运行一些代码,使用命令的名称。我在 yargs api 文档中找不到任何内容。
具体来说,我想删除我的每个命令创建的缓存。例如命令foo
,在 中创建一个缓存./.tmp/foo
。我只想在每次运行之前删除该缓存。我可以从每个命令回调中删除它,但很好奇是否有更编程的方式来做到这一点。
yargs 是否有任何我可以用来完成此任务的功能?
您可以使用Middleware,它在命令执行之前提供解析参数的转换。
-------------- -------------- ---------
stdin ----> argv ----> | Middleware 1 | ----> | Middleware 2 | ---> | Command |
-------------- -------------- ---------
但是,您可以使用相同的方法来清理缓存。
示例中间件
const { promisify } = require('util') // since node 8.0.0
const readFile = promisify(require('fs').readFile)
const normalizeCredentials = (argv) => {
if (!argv.username || !argv.password) {
return readFile('~/.credentials').then(data => JSON.parse(data))
}
return {}
}
// Add normalizeCredentials to yargs
yargs.middleware(normalizeCredentials)
// yargs parsing configuration
var argv = require('yargs')
.usage('Usage: $0 <command> [options]')
.command('login', 'Authenticate user', (yargs) =>{
return yargs.option('username')
.option('password')
} ,(argv) => {
authenticateUser(argv.username, argv.password)
},
[normalizeCredentials]
)
.argv;