在 Oclif CLI 中包含由 space 分隔的参数
Including parameters seperated by space in Oclif CLI
我正在尝试使用 oclif 构建一个使用 Rest API 的 CLI。
我的代码如下:
import Command from '@oclif/command'
import axios from 'axios'
export class AggregatedCommand extends Command {
static args = [
{name: 'Area', required: true},
{name: 'AreaName', required : true},
{name: 'timeres', required: true},
{name: 'Resolution', required: true},
{name: 'ProdType',required: true},
{name: 'ProductionType',required:true},
{name: 'dateformat', required: true},
{name: 'dateinput', required: true},
{name: 'beforeformat', required: false},
{name: 'format' , required: false}
]
async run() {
const axios = require('axios');
const {args} = this.parse(AggregatedCommand);
//console.log(`${args.format}`);
if (`${args.dateformat}`=='--date'){
var splitted = `${args.dateinput}`.split("-", 3);
// console.log('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]);
if (`${args.format}`== "undefined" || `${args.format}`=="json"){
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]);
console.log(data.data);
}
else if (`${args.format}`=="csv") {
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]+ "/format=" + `${args.format}`);
console.log(data.data);
}
else console.log("Error 400: Bad Request");
}
else if (`${args.dateformat}`=='--month'){
var splitted = `${args.dateinput}`.split("-", 2);
if (`${args.format}`== "undefined" || `${args.format}`=="json"){
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/month/' + splitted[0] +'-' + splitted[1]);
console.log(data.data);
}
else if (`${args.format}`=="csv") {
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/month/' + splitted[0] +'-' + splitted[1] + "/format=" + `${args.format}`);
console.log(data.data);
}
else console.log("Error 400: Bad Request");
}
我正在尝试输入如下命令:
energy AggregatedGenerationPerType --area United Kingdom --timeres PT15M --productionType AllTypes --year 2018
但是oclif和typescript不承认英国是一个参数而是两个"United"和"Kingdom"。我该如何解决?
由于您已经在示例调用中使用了标志,因此您应该切换到它们而不是 args。 (参见 https://oclif.io/docs/flags)。
Arguments are positional arguments passed to the command
Flag options are non-positional arguments passed to the command
示例:
export class AggregatedCommand extends Command {
static flags = {
area: flags.string(),
timeres: flags.string(),
...
}
async run() {
const {flags} = this.parse(AggregatedCommand)
if (flags.area) console.log('--area is set')
if (flags.timeres) console.log('--timeres is set')
}
}
那你就可以通过了
energy AggregatedGenerationPerType --area "United Kingdom" --timeres PT15M --productionType AllTypes --year 2018
我正在尝试使用 oclif 构建一个使用 Rest API 的 CLI。
我的代码如下:
import Command from '@oclif/command'
import axios from 'axios'
export class AggregatedCommand extends Command {
static args = [
{name: 'Area', required: true},
{name: 'AreaName', required : true},
{name: 'timeres', required: true},
{name: 'Resolution', required: true},
{name: 'ProdType',required: true},
{name: 'ProductionType',required:true},
{name: 'dateformat', required: true},
{name: 'dateinput', required: true},
{name: 'beforeformat', required: false},
{name: 'format' , required: false}
]
async run() {
const axios = require('axios');
const {args} = this.parse(AggregatedCommand);
//console.log(`${args.format}`);
if (`${args.dateformat}`=='--date'){
var splitted = `${args.dateinput}`.split("-", 3);
// console.log('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]);
if (`${args.format}`== "undefined" || `${args.format}`=="json"){
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]);
console.log(data.data);
}
else if (`${args.format}`=="csv") {
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/date/' + splitted[0] +'-' + splitted[1] + '-' + splitted[2]+ "/format=" + `${args.format}`);
console.log(data.data);
}
else console.log("Error 400: Bad Request");
}
else if (`${args.dateformat}`=='--month'){
var splitted = `${args.dateinput}`.split("-", 2);
if (`${args.format}`== "undefined" || `${args.format}`=="json"){
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/month/' + splitted[0] +'-' + splitted[1]);
console.log(data.data);
}
else if (`${args.format}`=="csv") {
const data= await axios.get('http://localhost:8765/energy/api/AggregatedGenerationPerType/' +`${args.AreaName}` +'/' + `${args.ProductionType}` +'/' + `${args.Resolution}` +'/month/' + splitted[0] +'-' + splitted[1] + "/format=" + `${args.format}`);
console.log(data.data);
}
else console.log("Error 400: Bad Request");
}
我正在尝试输入如下命令:
energy AggregatedGenerationPerType --area United Kingdom --timeres PT15M --productionType AllTypes --year 2018
但是oclif和typescript不承认英国是一个参数而是两个"United"和"Kingdom"。我该如何解决?
由于您已经在示例调用中使用了标志,因此您应该切换到它们而不是 args。 (参见 https://oclif.io/docs/flags)。
Arguments are positional arguments passed to the command
Flag options are non-positional arguments passed to the command
示例:
export class AggregatedCommand extends Command {
static flags = {
area: flags.string(),
timeres: flags.string(),
...
}
async run() {
const {flags} = this.parse(AggregatedCommand)
if (flags.area) console.log('--area is set')
if (flags.timeres) console.log('--timeres is set')
}
}
那你就可以通过了
energy AggregatedGenerationPerType --area "United Kingdom" --timeres PT15M --productionType AllTypes --year 2018