如何在运行时在 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()
未定义。奇怪的是,新选项显示在--help
屏幕上。
显然选项对象只初始化一次:https ://github.com/gruntjs/grunt/blob/0.3-stable/lib/grunt/cli.js#L105 。我无法弄清楚为什么在使用长开关选项时会评估新选项。
我想我应该在添加新选项后重新解析选项。我可以再次调用grunt.tasks(),但这不起作用,正如我所料。
错误的方法。有什么更好的方法?
在创建 Grunt 助手或任务时,我会有同样的限制吗?这是一个应该在 Grunt 内部更改的一般限制吗?
这个问题与:
- Grunt 0.3.15+(据我所知,它也应该适用于 0.4.x)
- 节点 0.6.18
编辑
我现在对 Grunt 进行了更多的逆向工程,并尝试更改 Grunt 本身以允许自己在运行时添加选项。
我跳过在 Grunt 中编写更改,因为它太多且具有误导性,我认为。让我描述一下总结的变化。
到目前为止,这是我的 Grunt 文件:
grunt.addOptions({
"environment": {
"short": "L",
info: "Build environment",
type: String
}
});
addOptions()
尝试将传递的选项添加到对象optlist
,然后重新解析选项对象。重新解析只需将此处的代码包装到一个在初始化时和 endof 时调用的方法中即可addOptions()
。
到目前为止,我的实施并没有解决问题。我将不得不在 Grunt 中进行太多更改,因为 Grunt 的内部依赖结构不允许加载和解析 Grunt 文件(这需要解析的命令行选项),然后进一步初始化命令行选项配置(这是我的方法)。
我认为应该与 GitHub 的 Grunt 开发人员讨论为 Grunt 文件提供自定义选项。
到目前为止我的回答
那我该怎么回答...
我上面的例子是正确和合适的,只要一个人可以接受长选项。
一旦我有更多信息,我会更新这个问题。:)