将grunt命令行选项解释为string

作为构build过程的一部分,我们运行一个像这样的Grunt任务:

grunt release -r 3.9 

使用-r选项传递的版本号用于标记版本的各个部分。

发布的问题会以零结束 – 例如3.10。 Grunt将其视为一个数字,删除尾部零,并认为这是版本3.1。

这是一个简单的Gruntfile,它演示了这个问题:

 module.exports = function(grunt) { grunt.registerTask('default', 'Release preparation', function () { var rel = grunt.option("r").toString(); grunt.log.writeln("Release data type:" + typeof rel); grunt.log.writeln("release (" + rel + ")"); }); }; 

以下是你所得到的:

 $ grunt -r 3.10 Running "default" task Release data type:string release (3.1) Done, without errors. 

toString()把它转换成适当的string,但是破坏已经完成了。 尾随零不见了。

有什么办法呢?

不幸的是,这似乎是这样的行为,因为grunt-cli使用nopt模块来执行命令行parsing。 看到这里的代码,关键是:

 return nopt(exports.known, exports.aliases, process.argv, 2); 

这就是nopt关于types所要说的 (重点是我的):

parsing未知字段时,“true”,“false”和“null”将被解释为它们的JavaScript等价物, 数值将被解释为一个数字。

一些解决方法可能是:

  1. 在命令行上使用类似grunt release -r "v3.10"东西,并grunt release -r "v3.10"你的grunt代码中的“v”
  2. 在您的grunt代码中再次读取process.argv ,并将其传递到您select的选项parsing器中