Javascript 将grunt命令行选项解释为字符串
作为构建过程的一部分,我们运行如下Grunt任务:Javascript 将grunt命令行选项解释为字符串,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,作为构建过程的一部分,我们运行如下Grunt任务: grunt release -r 3.9 与-r选项一起传递的版本号用于标记版本的各个部分 问题出现在以零结尾的版本上,例如3.10。Grunt将其视为一个数字,去掉尾随的零,并认为这是3.1版 下面是一个简单的Gruntfile,它演示了问题: module.exports = function(grunt) { grunt.registerTask('default', 'Release preparation', function
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()
将其适当地转换为字符串,但损坏已经造成。尾随的零消失了
不管怎么说?不幸的是,这种行为似乎是设计出来的,因为grunt cli使用模块进行命令行解析。参见代码,关键行为:
return nopt(exports.known, exports.aliases, process.argv, 2);
这就是(我的重点):
解析未知字段时,“true”、“false”和“null”将被解释为它们的JavaScript等价项,数值将被解释为数字。
一些变通方法可能是:
grunt release-r“v3.10”
的东西,去掉grunt代码中的“v”process.argv
,并将其传递到所选的选项解析器中在Grunt的github上打开一个问题:必须添加“v”,然后去掉它