将 grunt 命令行选项解释为字符串

Interpreting grunt command line option as string

本文关键字:字符串 解释 选项 grunt 命令行      更新时间:2023-09-26

作为构建过程的一部分,我们运行一个像这样的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 使用 nopt 模块进行命令行解析。请参阅此处的代码,关键行是:

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

这就是 nopt 对类型的看法(强调我的):

解析未知字段时,"true"、"false"和"null"将被解释为它们的 JavaScript 等价物,数值将被解释为数字。

几种解决方法可能是:

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