Making Your Own

cli库的目的是方便您自己创建自己ID命令行工具

CLI

一个CLI处理所有命令行标志、选项和参数的解析,并且实例化一个Plugin来处理命令

一个CLI可以支持多个Plugin在这种情况下,第一个参数被用来决定运行哪一个 (如果没有参数,将选择默认的插件) ,或者可以被设计成独立的, 在这种情况下,正好可以使用一个Plugin并且不允许有命令参数。

addPlugin( command , pluginClass ) void

command添加一个plugin类。在所有选项和标志被使用后,第一个参数将被使用,相关的插件类将被实例化并运行。

setPlugin( pluginClass ) void

设置一个专门的Plugin类,将处理所有的输入。 它不能与addPlugin一起使用,也不会自动接受参数中的命令。

showUsage( [ message = "" [ , status = 0 ] ] ) never

显示CLI的使用帮助屏幕并终止。

run( args ) Promise< void >

通常传入的args数值将会是process.argv.slice(2).

Plugin

每个Plugin管理CLI的每一条命令并且分阶段执行。

如果使用CLI的请求(i.e. 即帮助), 则使用静态方法getHelpgetOptionHelp用来生成帮助界面

Otherwise, a plugin is instantiated and the prepareOptions is called. Each plugin must call super.prepareOptions, otherwise the basic options are not yet processed. During this time a Plugin should consume all the flags and options it understands, since any left over flags or options will cause the CLI to bail and issue an unknown option error. This should throw if a value for a given option is invalid or some combination of options and flags is not allowed.

一旦prepareOptions完成(the returned promise is resolved), 就会调用prepareArguments。这应该验证预期参数的数量,如果有太多或者太少,或者任何参数没有意义,则抛出一个错误。

一旦prepareArguments完成(the returned promise is resolved), 则会调用 run

plugin.network Network

这个插件运行的网络

plugin.provider Provider

这个插件运行的provider对象

plugin.accounts Array< Signer >

使用这个插件可以使用--account,--account-rpc--account-void 传递给插件的账户

plugin.gasLimit 大数(BigNumber)

这个插件应该使用的gas限额。如果未指定则为空。

plugin.gasPrice 大数(BigNumber)

这个插件应该使用的gas价格。如果未指定则为空。

plugin.nonce number

这个插件用户应该使用的初始nonce。

方法

plugin.prepareOptions( argParser [ , verifyOnly = false ] ) Promise< void >
plugin.prepareArgs( args ) Promise< void >
plugin.run( ) Promise< void >
plugin.getAddress( addressOrName [ , message = "" , [ allowZero = false ] ] ) Promise< string >

插件应该使用这种方法来解析地址。如果解析的地址是零地址,并且allowZero不是真值, 则会引发错误。

plugin.dump( header , info ) void

info以良好的格式风格转储到console控制台,并带有header。以后的话,插件可能会支持自动使用该方法的JSON输出格式。

plugin.throwUsageError( [ message = "" ] ) never

停止插件的执行,显示插件的帮助屏幕,带有可选的信息.

plugin.throwError( message ) never

停止插件的执行,显示信息.

静态方法

Plugin.getHelp Help

每个子类都应该实现这个静态方法用于生成帮助屏幕

Plugin.getOptionHelp Array< Help >

如果它支持用于生成帮助屏幕的附加选项,每个子类都应该实现这个静态方法。

ArgParser

ArgParser is used to 用来将一条命令行解析成标志, 选项和参数。

/home/ethers> ethers --account wallet.json --yes send ricmoo.eth 1.0 # An Option ----------^ ^ ^ # - name = "account" | | # - value = "wallet.json" | | # A Flag -----------------------------------+ | # - name = "yes" | # - value = true | # Arguments ------------------------------------+ # - count = 3 # - [ "send", "ricmoo.eth", "1.0" ]

Flags 是一个简单的二进制选项(例如--yes), 如果存在则为真,否则的话为假

选项在一个命令行中需要带一个参数 (例如--account wallet.json, 它有名字account 和它的值wallet.json)

参数是命令行中所有其他值,而并不是通过ArgParser直接访问的.

当一个CLI在运行的时候, 一个ArgParser通过使用prepareOptions来验证命令行, which consumes all flags and options leaving only the arguments behind, which are then passed into prepareArgs.

argParser.consumeFlag( name ) boolean

删除标签name,如果存在,返回true

argParser.consumeMultiOptions( names ) Array< {name:string,value:string} >

删除所有与names数组中的任何名称相匹配的选项,其值返回值的列表(按顺序)。

argParser.consumeOption( name ) string

删除带有name值的选项,并返回该值。如果该选项被多次包含,这将抛出一个UsageError。

argParser.consumeOptions( name ) Array< string >

删除所有选项及其对name的值,并返回(按顺序)值的列表。