7

データ読み込みヘルパー ライブラリの cli 引数を検証するためにyargsを使用しています。

スクリプトの実行を許可する前に、ファイルが存在することを確認できるようにしたいと考えていますfs.accessSync(filename, fs.R_OK);。ただし、ファイルが存在しない場合、メッセージは単純に .check() 関数をエラーとして表示しますが、インターセプトして、ファイルが存在しないことを示します (読み取り権限あり)。

では、偽の戻り値で .check() によって表示されるエラーを送信するにはどうすればよいですか?

これが私のyargsの要点です:

var path = {
  name: 'filepath',
  options: {
    alias: 'f',
    describe: 'provide json array file',
    demand: true,
  },
};

function fileExists(filename) {
  try {
    fs.accessSync(filename, fs.R_OK);
    return true;
  } catch (e) {
    return false;
  }
}

var argv = require('yargs')
  .usage('$0 [args]')
  .option(path.name, path.options)
  .check(function (argv) {
    return fileExists(argv.f);
  })
  .strict()
  .help('help')
  .argv;

読み取り可能なファイルでない場合は、次のエラーが返されます。

Argument check failed: function (argv) {
  return fileExists(argv.f);
}

次の行に沿って何かを指定できるようにしたいと思います。 Argument check failed: filepath is not a readable file

4

1 に答える 1

13

したがって、yargs 5.0.0 では、真実ではない値を返すと、その出力全体が出力されます。

Argument check failed: function (argv) {
  return fileExists(argv.f);
}

代わりにスローすると、出力メッセージを制御できます。

.check((argv) => {
  if (fileExists(argv.f)) {
     return true;
  }
  throw new Error('Argument check failed: filepath is not a readable file');
})
于 2016-09-24T20:14:55.483 に答える