我需要在每个命令运行之前使用命令名称运行一些代码。我无法在yargs api文档中找到任何内容。
具体地说,我想删除每个命令创建的缓存。例如命令foo
在./.tmp/foo
中创建一个缓存。我想在每次运行之前删除 only 该缓存。我可以从每个命令回调中将其删除,但很好奇是否还有其他编程方式可以做到这一点。
yargs是否具有我可以用来完成此操作的任何功能?
答案 0 :(得分:0)
您可以使用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;