如何在运行时在Grunt文件中添加和评估命令行选项?
我试过这个:
module.exports = function(grunt) {
var cli = grunt.cli;
cli.optlist["environment"] = {
"short": "E",
info: "Build environment",
type: String
};
// This only outputs "environment=abc" if Grunt was called with
// --environment, with -E it returns "environment=undefined"
console.log("environment=" + grunt.option("environment"));
grunt.initConfig({ ... });
...
}
只要我使用--environment
开关,只要我使用-E
,grunt.option()
返回undefined,它就会正常工作。奇怪的是,新选项显示在--help
屏幕中。
显然,选项对象仅初始化一次:https://github.com/gruntjs/grunt/blob/0.3-stable/lib/grunt/cli.js#L105。我无法弄清楚为什么在使用长开关选项时会对新选项进行评估。
我认为在添加新选项后我应该重新解析选项。我可以再次调用grunt.tasks(),但这不起作用,正如我所料。
错误的方式。什么是更好的方式?
创建Grunt帮助器或任务时,我会遇到相同的限制吗?这是一个应该在Grunt内部改变的一般限制吗?
这个问题与:
有关我现在对Grunt进行了更多的逆向设计并试图改变Grunt本身以允许自己在运行时添加选项。
我想跳过写Grunt中的变化,因为它太多而且误导了。让我来描述总结的变化。
到目前为止,这是我的Grunt文件:
grunt.addOptions({
"environment": {
"short": "L",
info: "Build environment",
type: String
}
});
addOptions()
尝试将传递的选项添加到optlist
对象,然后重新解析选项对象。只需将the code here包装到初始化时调用的方法addOptions()
结束时重新解析。
到目前为止,我的实施并未解决问题。由于Grunt的内部依赖结构不允许加载和解析Grunt文件(需要解析的命令行选项),然后再进一步初始化命令行选项config(这是我的方法),因此我必须在Grunt中进行太多更改。
我认为应该与GruHub的Grunt开发人员讨论为Grunt文件提供自定义选项。
那我该怎么回答......
上面的例子是正确和合适的,只要可以使用长选项。
我会在收到更多信息后立即更新此问题。 :)
答案 0 :(得分:3)
也许我错过了什么,但你需要对两者进行测试:
var environment = grunt.option("E") || grunt.option("environment");
答案 1 :(得分:0)
值得一提的是,随着您要使用的命令行参数的数量增加,将与grunt内部使用的某些参数发生冲突。
解决了这个问题来自插件作者:
Grunt太棒了。 Grunt对使用其他命令行选项的支持并不令人敬畏。当前的文档具有误导性,因为它们给出了使用布尔标志和带有值的选项的示例,但是它们并没有告诉您它只能使用单个选项。尝试并使用多个选项,事情很快就会崩溃。
***我之前发布了这个,但是我在命令行参数上遇到了这么糟糕的时间,当你在grunt"中使用google"命令行参数时这个排名很高。这绝对值得一试