将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等价物, 数值将被解释为一个数字。
一些解决方法可能是:
- 在命令行上使用类似
grunt release -r "v3.10"
东西,并grunt release -r "v3.10"
你的grunt代码中的“v” - 在您的grunt代码中再次读取
process.argv
,并将其传递到您select的选项parsing器中