应用同一标志的多个实例时自定义 opstring 解析?
Custom opstring parsing when multiple instances of same flag is applied?
我有一个命令行程序,我想在给定多个参数的情况下生成一张图片,其中应遵守参数的顺序,并且允许重复的参数
是否有任何 node.js 允许这样做的 optstring 解析器?
我想要类似的东西
generate_picture --red 100 --yellow 200 --red 100 --width 500
然后它生成一个“旗帜”,上面有一个 100px 的红色带,然后是一个 200px 的黄色带,然后是另一个 100px 的红色带,所有应用的宽度都是 500px
我的程序并没有真正做到这一点,但它是相似的
我认为我的程序接收这些参数的理想形式是像这样的数组
[
['red', 100],
['yellow', 200],
['red', 100],
['width', 500]
]
我可能会预先扫描这个数组中的数组,寻找我希望只应用一次的东西,比如宽度
我想现在我把它写出来了,手动解析 process.argv 数组以使其进入这种状态可能不会太难,但很好奇是否已经有可用的选项
为了帮助我的特殊情况,我制作了这个实用函数
function parseArgv(argv) {
const map = [];
while (argv.length) {
const val = argv[0].slice(2);
argv = argv.slice(1);
const next = argv.findIndex((arg) => arg.startsWith("-"));
if (next !== -1) {
map.push([val, argv.slice(0, next)]);
argv = argv.slice(next);
} else {
map.push([val, argv]);
break;
}
}
return map;
}
用法示例
test("parse", () => {
expect(
parseArgv(
"--bam file1.bam color:red --vcf variants.vcf --bam file2.bam --defaultSession --out out.svg --fullSvg".split(
" "
)
)
).toEqual([
["bam", ["file1.bam", "color:red"]],
["vcf", ["variants.vcf"]],
["bam", ["file2.bam"]],
["defaultSession", []],
["out", ["out.svg"]],
["fullSvg", []],
]);
});
然后 post 处理可以使这一点更有意义,但是这个实用函数以 yargs 或其他节点 optstring 解析器无法实现的方式对我的目的有所帮助
我有一个命令行程序,我想在给定多个参数的情况下生成一张图片,其中应遵守参数的顺序,并且允许重复的参数
是否有任何 node.js 允许这样做的 optstring 解析器?
我想要类似的东西
generate_picture --red 100 --yellow 200 --red 100 --width 500
然后它生成一个“旗帜”,上面有一个 100px 的红色带,然后是一个 200px 的黄色带,然后是另一个 100px 的红色带,所有应用的宽度都是 500px
我的程序并没有真正做到这一点,但它是相似的
我认为我的程序接收这些参数的理想形式是像这样的数组
[
['red', 100],
['yellow', 200],
['red', 100],
['width', 500]
]
我可能会预先扫描这个数组中的数组,寻找我希望只应用一次的东西,比如宽度
我想现在我把它写出来了,手动解析 process.argv 数组以使其进入这种状态可能不会太难,但很好奇是否已经有可用的选项
为了帮助我的特殊情况,我制作了这个实用函数
function parseArgv(argv) {
const map = [];
while (argv.length) {
const val = argv[0].slice(2);
argv = argv.slice(1);
const next = argv.findIndex((arg) => arg.startsWith("-"));
if (next !== -1) {
map.push([val, argv.slice(0, next)]);
argv = argv.slice(next);
} else {
map.push([val, argv]);
break;
}
}
return map;
}
用法示例
test("parse", () => {
expect(
parseArgv(
"--bam file1.bam color:red --vcf variants.vcf --bam file2.bam --defaultSession --out out.svg --fullSvg".split(
" "
)
)
).toEqual([
["bam", ["file1.bam", "color:red"]],
["vcf", ["variants.vcf"]],
["bam", ["file2.bam"]],
["defaultSession", []],
["out", ["out.svg"]],
["fullSvg", []],
]);
});
然后 post 处理可以使这一点更有意义,但是这个实用函数以 yargs 或其他节点 optstring 解析器无法实现的方式对我的目的有所帮助