作为构建过程的一部分,我们运行如下的Grunt任务:
grunt release -r 3.9
使用-r
选项传递的版本号用于标记版本的各个部分。
问题出现在以零结尾的版本中 - 例如3.10。 Grunt将此视为一个数字,删除尾随零,并认为这是3.1版本。
这是一个简单的Grunt文件,它演示了这个问题:
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()
将其恰当地转换为字符串,但损坏已经完成。尾随零消失了。
有什么方法吗?
答案 0 :(得分:8)
不幸的是,似乎这种行为是设计的,因为grunt-cli使用nopt模块来执行命令行解析。请参阅代码here,关键行是:
return nopt(exports.known, exports.aliases, process.argv, 2);
这是nopt has to say about types(强调我的):
解析未知字段时,“true”,“false”和“null”将被解释为其JavaScript等价物,数值将被解释为数字。
可能有几种解决方法:
grunt release -r "v3.10"
的内容,并删除代码中的“v”process.argv
并将其传递到您选择的选项解析器