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

标签 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 () {
    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模块进行命令行解析。查看代码 here ,关键行是:

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

这就是nopt has to say about types (强调我的):

When parsing unknown fields, "true", "false", and "null" will be interpreted as their JavaScript equivalents, and numeric values will be interpreted as a number.

一些解决方法可能是:

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

关于javascript - 将 grunt 命令行选项解释为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723360/

相关文章:

javascript - 如何开玩笑地在非内联样式 CSS 上创建测试

node.js - -bash : grunt: command not found

javascript - 通过 ajax 加载 Google Plus 按钮

javascript - 如何使用 ES5 使用多个值查找数组中对象的索引?

javascript - 使用 Knex.js 和 Objection.js 连接到 Azure Postgres 数据库

javascript - Sequelize,如何更新另一个模型上的关联模型

css - Grunt autoprefixer 不工作

javascript - 将 JSON 文件导入运行在 Grunt 服务器上的 Angular 应用程序

javascript - Bootstrap 轮播无法激活 2 个轮播指示器

javascript - Electron:从 main.js 更改 React 组件状态