使用yargs从gulpfile检查错误的命令参数

时间:2015-05-18 19:34:02

标签: angularjs gulp

我有一个Angular应用程序的gulp文件,我试图捕获参数中的错误。

var gulp = require('gulp');
var args = require('yargs').argv;
...
var isProduction = args.env === 'production';
var useHttpBackend = args.api === 'mock';

在我的gulpfile中,我有各种使用'isProduction'和'useHttpBackend'的任务来确定如何处理文件,资产等。

两个主要任务是'默认'和'构建'。

// Starts test server and sets up watch and livereload
gulp.task('default', function() {
  gulp.start('connect', 'build', 'watch');
});

...

gulp.task('build', ['clean'], function() {
  gulp.start('assets', 'app', 'stylus', 'index', 'templates', 'vendor');
});

基本上可以运行两个命令:

# continuous incremental rebuild + web server + api mocking
./node_modules/.bin/gulp --api mock
...
# build for production (optimized version)
./node_modules/.bin/gulp --env production

我甚至不确定我的问题是否需要所有这些信息,但我如何检查命令中的参数?当使用'-api'(单连字符)而不是'--api'(双连字符)运行第一个命令时,仍然会运行任务但是应用程序无法正常运行,因为无法识别args。如何在这种情况下输出 - 帮助或错误?

1 个答案:

答案 0 :(得分:0)

幸运的是,这一切都在规格中。请参阅https://www.npmjs.com/package/yargs

一个例子:

var gulp = require('gulp');
gulp.task('args', function(){
    require('yargs')
      .usage('Usage: $0 -w [num] -h[num]')
      .demand(['w','h'])
      .argv;

      console.log("The area is:", argv.w * argv.h);
});

当你这样做时:

gulp t -w 55 -h 11

它将导致:区域为:605

当你这样做时:

gulp t -w 55

会导致错误,例如:

  

用法:节点... \ node_modules \ gulp \ bin \ gulp.js -w [num] -yh [num]

     

选项:-w [必需] -h [必需]

     

缺少必需的参数:h