Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将grunt命令行选项解释为字符串_Javascript_Node.js_Gruntjs - Fatal编程技术网

Javascript 将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任务:

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”
  • 再次读取grunt代码中的
    process.argv
    ,并将其传递到所选的选项解析器中

  • 在Grunt的github上打开一个问题:必须添加“v”,然后去掉它