CN116048476A - 命令行工具执行方法、装置、介质及设备 - Google Patents
命令行工具执行方法、装置、介质及设备 Download PDFInfo
- Publication number
- CN116048476A CN116048476A CN202310135324.5A CN202310135324A CN116048476A CN 116048476 A CN116048476 A CN 116048476A CN 202310135324 A CN202310135324 A CN 202310135324A CN 116048476 A CN116048476 A CN 116048476A
- Authority
- CN
- China
- Prior art keywords
- command line
- command
- user configuration
- plug
- event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3058—Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种命令行工具执行方法、装置、介质及设备,其中的方法包括:初始化命令行工具,其中,在所述命令行工具中内置全局命令;准备阶段,根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。本申请可提高命令行开发的灵活性。
Description
技术领域
本申请涉及计算机技术领域,尤其是涉及到一种命令行工具执行方法、装置、介质及设备。
背景技术
随着计算机技术的飞速发展,APP或小程序中时常需要添加命令行代码。命令行工具(Command Line Interface,CLI)是在命令行终端中使用的工具,通过命令行工具提供的命令行开发的基础库,实现命令行开发。
发明内容
有鉴于此,本申请提供了一种命令行工具执行方法、装置、介质及电子设备,主要目的在于提供一种基于插件机制的命令行工具执行方案,以实现灵活的命令行开发。
依据本申请的一个方面,提供了一种命令行工具执行方法,包括:
初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备阶段,根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
在一种实现方式中,还包括:
在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器;
调用所述基础事件触发器,确定所述准备阶段的处理逻辑,和/或,调用所述扩展事件触发器,确定所述执行阶段的处理逻辑。
在一种实现方式中,所述在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器,包括:
在所述命令行工具中自定义基础事件触发器,并在所述执行器组件中注册所述基础事件触发器;和/或,
在初始化所述执行器组件时,新增扩展事件触发器工厂函数,根据所述扩展事件触发器工厂函数,将扩展事件触发器注入到所述命令行工具。
在一种实现方式中,
所述基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,包括:在运行所述执行器组件的生命周期内,基于所述执行器组件新增的扩展事件触发器,对执行器组件运行过程中的特定事件或特定接口进行监听;
所述在监听到特定事件或特定接口时基于所述用户配置文件进行响应,包括:监听到修改配置事件、校验配置事件和/或数据内容准备事件,基于所述用户配置文件修改或校验用户配置,并提供用于执行命令行所需的数据内容。
在一种实现方式中,所述准备阶段的处理逻辑包括:
文件前置准备,通过开启所述全局命令中的自动载入用户配置文件命令选项,完成所述用户配置文件的载入;
插件准备,通过开启所述全局命令中的自动载入插件命令选项,完成所述至少一个插件的载入;
配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据所述用户配置信息对载入的用户配置文件进行过滤,筛选出所述插件对应的用户配置文件。
在一种实现方式中,所述执行阶段的处理逻辑包括:
解析在所述执行器组件中预先注册的命令行,确定命令行匹配的参数信息;
加载所述插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;
根据所述参数信息,从所述用户配置文件中获取运行命令行需要的数据内容;
运行所述数据内容,返回命令行执行结果。
在一种实现方式中,所述根据预先设置的配置处理选项,对用户配置文件进行修改和/或校验,包括:
根据预先设置的配置处理选项,运行用户配置修改函数,更新用户配置,和/或,
根据预先设置的配置处理选项,运行用户注册元素函数,根据所述注册元素对用户配置进行校验。
在一种实现方式中,所述初始化命令行工具,包括:
安装命令行工具依赖包;
其中,在所述命令行工具中内置有以下全局命令中的至少一项:工作目录命令、自定义配置文件路径命令、自动载入用户配置文件命令、自动载入插件命令,其中,通过开启或关闭全局命令选项,执行或取消命令对应的功能。
在一种实现方式中,还包括:生成用户配置文件,包括:
运行所述自定义配置文件路径命令,以提供自定义配置文件路径,并提供自定义配置文件类型;
接收在所述自定义配置文件路径下输入的自定义配置选项的数据内容,生成满足所述文件类型的自定义配置文件。
在一种实现方式中,所述根据所述全局命令载入所述用户配置文件,包括:
通过开启所述全局命令中的自动载入用户配置文件命令选项,从所述自定义配置文件路径载入所述用户配置文件。
在一种实现方式中,还包括:编写所述插件,包括:
注册命令行,并注册用于执行所述命令行的执行器组件,其中,在所述执行器组件中注册所述命令行工具的基础事件触发器,和/或,将新增的扩展事件触发器注入到所述命令行工具;
注册用户配置信息。
在一种实现方式中,所述根据所述全局命令载入至少一个插件,包括:
通过开启所述全局命令中的自动载入插件命令选项,通过预先定义的插件回调函数调用所述至少一个插件。
根据本申请一个方面,提供一种命令行工具执行装置,包括:
初始化单元,用于初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备单元,用于根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行单元,用于基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
在一种实现方式中,还包括:
事件触发器控制单元,用于在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器;
其中,所述准备单元或所述执行单元,通过调用所述基础事件触发器,确定所述准备阶段的处理逻辑,和/或,调用所述扩展事件触发器,确定所述执行阶段的处理逻辑。
在一种实现方式中,所述事件触发器控制单元具体用于,在所述命令行工具中自定义基础事件触发器,并在所述执行器组件中注册所述基础事件触发器;和/或,在初始化所述执行器组件时,新增扩展事件触发器工厂函数,根据所述扩展事件触发器工厂函数,将扩展事件触发器注入到所述命令行工具。
在一种实现方式中,
所述执行单元具体用于,在运行所述执行器组件的生命周期内,基于所述执行器组件新增的扩展事件触发器,对执行器组件运行过程中的特定事件或特定接口进行监听;以及,监听到修改配置事件、校验配置事件和/或数据内容准备事件,基于所述用户配置文件修改或校验用户配置,并提供用于执行命令行所需的数据内容。
在一种实现方式中,所述准备单元的处理逻辑为:文件前置准备,通过开启所述全局命令中的自动载入用户配置文件命令选项,完成所述用户配置文件的载入;插件准备,通过开启所述全局命令中的自动载入插件命令选项,完成所述至少一个插件的载入;配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据所述用户配置信息对载入的用户配置文件进行过滤,筛选出所述插件对应的用户配置文件。
在一种实现方式中,所述执行单元的处理逻辑为:解析在所述执行器组件中预先注册的命令行,确定命令行匹配的参数信息;加载所述插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;根据所述参数信息,从所述用户配置文件中获取运行命令行需要的数据内容;运行所述数据内容,返回命令行执行结果。
在一种实现方式中,所述执行单元具体用于,根据预先设置的配置处理选项,运行用户配置修改函数,更新用户配置,和/或,根据预先设置的配置处理选项,运行用户注册元素函数,根据所述注册元素对用户配置进行校验。
在一种实现方式中,所述初始化单元具体用于,安装命令行工具依赖包;其中,在所述命令行工具中内置有以下全局命令中的至少一项:工作目录命令、自定义配置文件路径命令、自动载入用户配置文件命令、自动载入插件命令,其中,通过开启或关闭全局命令选项,执行或取消命令对应的功能。
在一种实现方式中,还包括:文件配置单元,用于运行自定义配置文件路径命令,以提供自定义配置文件路径,并提供自定义配置文件类型;以及,接收在所述自定义配置文件路径下输入的自定义配置选项的数据内容,生成满足所述文件类型的自定义配置文件。
在一种实现方式中,所述准备单元具体用于,通过开启所述全局命令中的自动载入用户配置文件命令选项,从所述自定义配置文件路径载入所述用户配置文件。
在一种实现方式中,还包括:插件编写单元,用于注册命令行,并注册用于执行所述命令行的执行器组件,其中,在所述执行器组件中注册所述命令行工具的基础事件触发器,和/或,将新增的扩展事件触发器注入到所述命令行工具;以及,注册用户配置信息。
在一种实现方式中,所述执行单元具体用于,通过开启所述全局命令中的自动载入插件命令选项,通过预先定义的插件回调函数调用所述至少一个插件。
依据本申请一个方面,提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述的方法。
依据本申请一个方面,提供一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述命令行工具执行方法。
依据本申请的一个方面,提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述命令行工具执行方法。
借由上述技术方案,本申请提供的一种命令行工具执行方法、装置、介质及设备,基于灵活完善的插件机制,在命令行工具中仅定义全局命令,而具体的命令行功能都是通过调用自定义插件来实现,这种方式便于通过插件自定义命令行,由于利用了高度可扩展的插件机制,因此可灵活进行新增、定制及扩展命令行。并且,基于事件订阅机制,通过事件触发器(例如hooks函数)来监听插件执行生命周期,并通过对事件响应的结果来干预流程,从而可实现流程定制,进一步增加灵活性。而且,本申请实施例提供丰富的基础能力支持(流程定制能力、脚手架定制能力、日志能力,插件协议支持能力、下载器支持能力、函数封装能力、环境变量支持能力及共享依赖能力等),为基础配置(用户配置文件、插件)提供了支持,从而保证整个命令行工具开发的高效、可扩展及可移植。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种命令行工具执行方法整体示意图;
图2示出了本申请实施例提供的一种命令行工具执行方法流程图;
图3示出了本申请实施例提供的一种命令行工具执行方法中准备阶段流程图;
图4示出了本申请实施例提供的一种命令行工具执行方法中初始化及准备阶段示意图;
图5示出了本申请实施例提供的一种命令行工具执行方法中执行阶段流程图;
图6示出了本申请实施例提供的一种命令行工具执行方法中执行阶段示意图;
图7示出了本申请实施例提供的一种命令行工具执行装置结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
为了提供一款灵活的命令行工具,以便作为命令行基础工具供各个项目使用和扩展,本申请实施例基于相对灵活和完善的插件机制,仅在命令行工具内部内置全局命令行选项,并未内置任何命令,全部命令功能通过插件来实现。
参见图1,示出了本申请实施例提供的一种命令行工具执行方法整体示意图。
本申请实施例提供的命令行工具,提供必要的基础能力支持,这些基础能力包括但不限于:流程定制能力、脚手架定制能力、日志能力,插件协议支持能力、下载器支持能力、函数封装能力、环境变量支持能力及共享依赖能力等。下面对各能力进行示例性说明。
流程定制可理解为,基于事件驱动的架构,通过事件订阅来监听某个生命周期,并通过对事件响应的结果来干预流程。例如通过对外开放编程事件触发器(例如基于事件的钩子(hooks)函数),从而放开用于介入到软件生命周期的某个接口或某个事件。本申请实施例中,可支持自定义hooks,自定义hooks例如进一步支持默认hooks(基础hooks)和扩展hooks,其中通过扩展hooks工厂函数,从而在每一次初始化一个插件执行器组件(Runner)时初始化对应的hooks,所谓的工厂函数就是指可以用来生产一个全新的hooks的函数,拓展hooks工厂函数,可用于初始化的新的hooks类型。
脚手架(generator)可以理解为,自动为项目创建基础结构、给开发者提供项目规范和约定的工具。本申请实施例中,支持自定义脚手架能力,可基于generator的开放能力来自定义脚手架逻辑和模板。例如,支持的脚手架能力包括downloaded、customized、prompted、written等。
日志能力可理解为,对于日志的约束和定义,提供了固定的日志方法,例如,提供logger.info()、logger.success()、logger.warn()、loading.update()、loading.stop()等日志方法。
插件协议支持可理解为,支持各种插件协议,例如支持内置插件(InternalPlugin)、通用插件(General Plugin)、局部插件(Local Plugin)。
下载器(downloader)支持可理解为,定义支持各种类型的文件下载,例如支持包括file文件、git仓库、link软链、npm包、tar包等。
函数封装能力可理解为,可支持封装及定义一些常用辅助函数及方法,例如支持asArray()、bundleMjsOrTsFile()方法等。
环境变量支持能力可理解为,支持统一环境变量的获取、解析和值判断以及.env文件加载等。
共享依赖支持能力可理解为,支持将命令行工具本身的依赖库输出(export)出去,从而避免依赖。
基于上述基础能力支持,进行工具的基础配置,基础配置主要包括全局化配置、用户配置及插件配置等。例如基础配置包括:执行初始化工具实例、设置全局名称、自定义新的配置文件名称、允许自定义支持的配置文件类型、开启多配置支持、开启通过package.json读取配置、设置用户配置文件名称、关闭多配置支持、设置用户配置的选项名称、设置插件自动加载规则、设置插件、加载用户插件列表并执行、对用户使用的插件进行排序,等等。
在完成基础配置之后,进行工具初始化,并进行资源准备阶段。其中,工具初始化可通过调用基础配置中的“执行初始化工具实例”来进行,然后,通过调用基础事件触发器(默认hooks),确定准备阶段的处理逻辑(定制流程),例如,准备阶段的处理逻辑可包括文件前置准备、插件准备、配置筛选三个步骤,其中,文件前置准备,通过开启全局命令中的自动载入用户配置文件命令选项,完成用户配置文件的载入;插件准备,通过开启全局命令中的自动载入插件命令选项,完成至少一个插件的载入;配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据用户配置信息对载入的用户配置文件进行过滤,筛选插件对应的用户配置文件。
最后,在执行阶段执行所有插件。在完成配置筛选之后,运行插件的执行器组件(runner)来实现插件的执行。其中,本申请实施例支持多任务机制执行所有插件。对于其中任一个插件的执行流程,由扩展事件触发器(扩展hooks)来定制流程,例如,插件的执行器组件的运行过程包括:解析在执行器组件中预先注册的命令行,确定命令行匹配的参数信息;加载插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;根据参数信息,从用户配置文件中获取运行命令行需要的数据内容;运行数据内容,返回命令行执行结果。
参见图2,示出了本申请实施例提供的一种命令行工具执行方法流程图。
S201:初始化命令行工具,其中,在命令行工具中内置全局命令;
S202:准备阶段,根据全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
S203:执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于用户配置文件进行响应,执行插件预先注册的命令行。
其中,初始化命令行工具的过程可以包括:安装命令行工具依赖包;其中,在命令行工具中内置有以下全局命令中的至少一项:工作目录命令、自定义配置文件路径命令、自动载入用户配置文件命令、自动载入插件命令,其中,通过开启或关闭全局命令选项,执行或取消命令对应的功能。
例如,内置全局命令选项如下:
--cwd[cwd]当前工作目录,默认为process.cwd();
-c,--config[path]指定自定义配置文件路径,支持.js,.ts,.json,.mjs等类型;
--ignore-config忽略或不自动载入用户配置文件;
--no-autoload-plugins关闭自动载入插件功能(default:true);
-h,--help显示帮助信息。
在开启“指定自定义配置文件路径(config[path])”设置、并默认缺省关闭“忽略或不自动载入用户配置文件(ignore-config)”设置情况下,可得到生成的用户配置文件。例如,在一种实现方式中,生成用户配置文件的步骤包括:运行自定义配置文件路径命令,以提供自定义配置文件路径,并提供自定义配置文件类型;接收在自定义配置文件路径下输入的自定义配置选项的数据内容,生成满足文件类型的自定义配置文件。因此,根据全局命令载入用户配置文件可包括:通过开启全局命令中的自动载入用户配置文件命令(关闭ignore-config)选项,从自定义配置文件路径载入用户配置文件。
如前描述的,基础配置除了配置全局命令和用户配置文件之外,还包括配置插件(编写插件)。因此,上述方法还包括编写插件的步骤,具体包括:(1)注册命令行;(2)注册用于执行命令行的执行器组件,其中,在执行器组件中注册命令行工具的基础事件触发器,和/或,将新增的扩展事件触发器注入到命令行工具;(3)注册用户配置信息。
例如,编写一个插件示例如下:
其中,根据全局命令载入至少一个插件包括:通过开启全局命令中的自动载入插件命令选项,通过预先定义的插件回调函数调用至少一个插件。
如前描述的,本申请实施例支持流程定制,例如,可通过对外开放编程事件触发器(例如基于事件的钩子(hooks)函数),从而放开用于介入到软件生命周期的某个接口或某个事件。本申请实施例中,可支持自定义hooks,自定义hooks例如进一步支持默认hooks(基础hooks)和扩展hooks。
因此,在一种实现方式中,上述方法还包括:在命令行工具中内置基础事件触发器和/或注入扩展事件触发器;调用基础事件触发器,确定准备阶段的处理逻辑,和/或,调用扩展事件触发器,确定执行阶段的处理逻辑。
在一种实现方式中,在命令行工具中内置基础事件触发器和/或注入扩展事件触发器,包括:在命令行工具中自定义基础事件触发器,并在执行器组件中注册所述基础事件触发器;和/或,在初始化执行器组件时,新增扩展事件触发器工厂函数,根据扩展事件触发器工厂函数,将扩展事件触发器注入到命令行工具。例如,命令行工具支持通过对Hooks或RunnerHooks类型定义进行扩展,以及调用registerHooks方法,通过注册工厂函数的方式对工具本身的hooks进行扩展。
在一种实现方式中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,包括:在运行执行器组件的生命周期内,基于执行器组件新增的扩展事件触发器,对执行器组件运行过程中的特定事件或特定接口进行监听;在监听到特定事件或特定接口时基于用户配置文件进行响应,包括:监听到修改配置事件、校验配置事件和/或数据内容准备事件,基于用户配置文件修改或校验用户配置,并提供用于执行命令行所需的数据内容。
参见图3,示出了本申请实施例提供的一种命令行工具执行方法中准备阶段流程图。
S301:文件前置准备,通过开启全局命令中的自动载入用户配置文件命令选项,完成用户配置文件的载入;
S302:插件准备,通过开启全局命令中的自动载入插件命令选项,完成至少一个插件的载入;
S303:配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据用户配置信息对载入的用户配置文件进行过滤,筛选出插件对应的用户配置文件。
参见图4,示出了本申请实施例提供的一种命令行工具执行方法中初始化及准备阶段示意图。
首先进行初始化,涉及的流程节点主要包括:
(1)initialize(执行初始化hook),执行prepare(前置准备工作),例如修改cwd、载入用户配置文件、过滤用户配置,其中,若已传入用户配置,则继续后续流程,如果没有传入用户配置,则尝试自动载入配置,此时,到达;
(2)configLoaded(配置文件载入完成流程节点);
(3)prepare(前置准备阶段),通过提供MultiConfigPlugin(多任务配置插件)过滤用户配置;
(4)ConfigFiltered(配置完成筛选),基于多配置逐一运行runner(执行器组件);
(5)extendRunner(执行扩展runner方法)。
参见图5示出了本申请实施例提供的一种命令行工具执行方法中执行阶段流程图。
S501:解析在执行器组件中预先注册的命令行,确定命令行匹配的参数信息;
S502:加载插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;
S503:根据参数信息,从用户配置文件中获取运行命令行需要的数据内容;
S504:运行数据内容,返回命令行执行结果。
在一种实现方式中,S502具体可包括:根据预先设置的配置处理选项,运行用户配置修改函数,更新用户配置,和/或,根据预先设置的配置处理选项,运行用户注册元素函数,根据注册元素对用户配置进行校验。
在一个示例中,执行器组件(runner)的执行流程可参考如下:
参见图6,示出了本申请实施例提供的一种命令行工具执行方法中执行阶段示意图。在完成工具和初始化和准备阶段之后,开始执行所有插件(loadPlugins),涉及的流程节点主要包括:
(1)initialize(执行初始化逻辑),执行prepareCliAndParseMatchedCommand(解析命令行或传入的命令);
(2)cli(运行命令行注册,并获取匹配的命令),执行prepareMatchedCommandAndArgs(准备匹配的命令选项);
(3)matchedCommand(获取匹配的命令和参数);
(4)loadConfig(加载config阶段),基于获取到的配置路径,并完成加载操作;
(5)modifyUserConfig(修改用户配置),可基于命令和命令选项修改配置,一般用于设定或修改默认值;
(6)registerUserConfig(注册用户自定义的schema),主要用于用户配置的校验;
(7)shouldRun(判断是否需要继续执行后续逻辑),如果是,进入shouldValidateUserConfig节点,如果否,执行logger.debug(中止并结束进程),中止后执行return this.result(返回命令执行的结果);
(8)shouldValidateUserConfig(检查是否需要校验用户配置):若需要校验,执行schema.passthrough().safeParseAsync()方法(校验用户配置,返回result结果),其中,当校验成功,执行this.userConfig=result.data(设置用户配置),当校验失败,到达RunnerError(校验配置出错,抛出具体错误配置项),然后进入failed节点;
(9)userConfigValidated(执行命令开始前的hook),用户配置校验完成之后执行;
(10)beforeRun(开始run之前的hook),可用于准备一些运行命令需要的数据或内容,此时,执行invokeCommandAction(运行命令对应的action);
(11)run(运行命令逻辑);
(12)done(runner运行完成),然后执行return this.result(返回命令执行的结果);
(13)failed(runner运行失败),然后执行return this.result(返回命令执行的结果);
(14)shutdown(runner关闭时执行),可在这个阶段执行清理逻辑(如内存等)。
可见,本申请实施例提供的命令行工具执行方法,基于灵活完善的插件机制,在命令行工具中仅定义全局命令,而具体的命令行功能都是通过调用自定义插件来实现,这种方式便于通过插件自定义命令行,由于利用了高度可扩展的插件机制,因此可灵活进行新增、定制及扩展命令行。并且,基于事件订阅机制,通过事件触发器(例如hooks函数)来监听插件执行生命周期,并通过对事件响应的结果来干预流程,从而可实现流程定制。而且,本申请实施例提供丰富的基础能力支持(流程定制能力、脚手架定制能力、日志能力,插件协议支持能力、下载器支持能力、函数封装能力、环境变量支持能力及共享依赖能力等),为基础配置(用户配置文件、插件)提供了支持,从而保证整个命令行工具开发的高效、可扩展及可移植。
参见图7,示出了本申请实施例提供的一种命令行工具执行装置结构示意图。
该装置包括:
初始化单元701,用于初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备单元702,用于根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行单元703,用于基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
在一种实现方式中,还包括:
事件触发器控制单元704,用于在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器;
其中,所述准备单元702或所述执行单元703,通过调用所述基础事件触发器,确定所述准备阶段的处理逻辑,和/或,调用所述扩展事件触发器,确定所述执行阶段的处理逻辑。
在一种实现方式中,所述事件触发器控制单元704具体用于,在所述命令行工具中自定义基础事件触发器,并在所述执行器组件中注册所述基础事件触发器;和/或,在初始化所述执行器组件时,新增扩展事件触发器工厂函数,根据所述扩展事件触发器工厂函数,将扩展事件触发器注入到所述命令行工具。
在一种实现方式中,
所述执行单元703具体用于,在运行所述执行器组件的生命周期内,基于所述执行器组件新增的扩展事件触发器,对执行器组件运行过程中的特定事件或特定接口进行监听;以及,监听到修改配置事件、校验配置事件和/或数据内容准备事件,基于所述用户配置文件修改或校验用户配置,并提供用于执行命令行所需的数据内容。
在一种实现方式中,所述准备单元702的处理逻辑为:文件前置准备,通过开启所述全局命令中的自动载入用户配置文件命令选项,完成所述用户配置文件的载入;插件准备,通过开启所述全局命令中的自动载入插件命令选项,完成所述至少一个插件的载入;配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据所述用户配置信息对载入的用户配置文件进行过滤,筛选出所述插件对应的用户配置文件。
在一种实现方式中,所述执行单元703的处理逻辑为:解析在所述执行器组件中预先注册的命令行,确定命令行匹配的参数信息;加载所述插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;根据所述参数信息,从所述用户配置文件中获取运行命令行需要的数据内容;运行所述数据内容,返回命令行执行结果。
在一种实现方式中,所述执行单元703具体用于,根据预先设置的配置处理选项,运行用户配置修改函数,更新用户配置,和/或,根据预先设置的配置处理选项,运行用户注册元素函数,根据所述注册元素对用户配置进行校验。
在一种实现方式中,所述初始化单元701具体用于,安装命令行工具依赖包;其中,在所述命令行工具中内置有以下全局命令中的至少一项:工作目录命令、自定义配置文件路径命令、自动载入用户配置文件命令、自动载入插件命令,其中,通过开启或关闭全局命令选项,执行或取消命令对应的功能。
在一种实现方式中,还包括:文件配置单元705,用于运行自定义配置文件路径命令,以提供自定义配置文件路径,并提供自定义配置文件类型;以及,接收在所述自定义配置文件路径下输入的自定义配置选项的数据内容,生成满足所述文件类型的自定义配置文件。
在一种实现方式中,所述准备单元702具体用于,通过开启所述全局命令中的自动载入用户配置文件命令选项,从所述自定义配置文件路径载入所述用户配置文件。
在一种实现方式中,还包括:插件编写单元706,用于注册命令行,并注册用于执行所述命令行的执行器组件,其中,在所述执行器组件中注册所述命令行工具的基础事件触发器,和/或,将新增的扩展事件触发器注入到所述命令行工具;以及,注册用户配置信息。
在一种实现方式中,所述准备单元702具体用于,通过开启所述全局命令中的自动载入插件命令选项,通过预先定义的插件回调函数调用所述至少一个插件。
本申请的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备阶段,根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备阶段,根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种命令行工具执行方法,其特征在于,包括:
初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备阶段,根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行阶段,基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器;
调用所述基础事件触发器,确定所述准备阶段的处理逻辑,和/或,调用所述扩展事件触发器,确定所述执行阶段的处理逻辑。
3.根据权利要求2所述的方法,其特征在于,所述在所述命令行工具中内置基础事件触发器和/或注入扩展事件触发器,包括:
在所述命令行工具中自定义基础事件触发器,并在所述执行器组件中注册所述基础事件触发器;和/或,
在初始化所述执行器组件时,新增扩展事件触发器工厂函数,根据所述扩展事件触发器工厂函数,将扩展事件触发器注入到所述命令行工具。
4.根据权利要求3所述的方法,其特征在于,
所述基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,包括:在运行所述执行器组件的生命周期内,基于所述执行器组件新增的扩展事件触发器,对执行器组件运行过程中的特定事件或特定接口进行监听;
所述在监听到特定事件或特定接口时基于所述用户配置文件进行响应,包括:监听到修改配置事件、校验配置事件和/或数据内容准备事件,基于所述用户配置文件修改或校验用户配置,并提供用于执行命令行所需的数据内容。
5.根据权利要求2所述的方法,其特征在于,所述准备阶段的处理逻辑包括:
文件前置准备,通过开启所述全局命令中的自动载入用户配置文件命令选项,完成所述用户配置文件的载入;
插件准备,通过开启所述全局命令中的自动载入插件命令选项,完成所述至少一个插件的载入;
配置筛选,其中,读取载入的插件预先注册的用户配置信息,根据所述用户配置信息对载入的用户配置文件进行过滤,筛选出所述插件对应的用户配置文件。
6.根据权利要求2所述的方法,其特征在于,所述执行阶段的处理逻辑包括:
解析在所述执行器组件中预先注册的命令行,确定命令行匹配的参数信息;
加载所述插件对应的用户配置文件,并根据预先设置的配置处理选项,对用户配置进行修改和/或校验;
根据所述参数信息,从所述用户配置文件中获取运行命令行需要的数据内容;
运行所述数据内容,返回命令行执行结果。
7.根据权利要求6所述的方法,其特征在于,所述根据预先设置的配置处理选项,对用户配置文件进行修改和/或校验,包括:
根据预先设置的配置处理选项,运行用户配置修改函数,更新用户配置,和/或,
根据预先设置的配置处理选项,运行用户注册元素函数,根据所述注册元素对用户配置进行校验。
8.一种命令行工具执行装置,其特征在于,包括:
初始化单元,用于初始化命令行工具,其中,在所述命令行工具中内置全局命令;
准备单元,用于根据所述全局命令,载入预先配置的用户配置文件和预先编写的至少一个插件;
执行单元,用于基于多任务机制执行所有插件,其中,基于事件订阅,监听当前任务插件中预先注册的执行器组件的运行过程,并在监听到特定事件或特定接口时基于所述用户配置文件进行响应,执行所述插件预先注册的命令行。
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7任一项中所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310135324.5A CN116048476A (zh) | 2023-02-17 | 2023-02-17 | 命令行工具执行方法、装置、介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310135324.5A CN116048476A (zh) | 2023-02-17 | 2023-02-17 | 命令行工具执行方法、装置、介质及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116048476A true CN116048476A (zh) | 2023-05-02 |
Family
ID=86131427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310135324.5A Pending CN116048476A (zh) | 2023-02-17 | 2023-02-17 | 命令行工具执行方法、装置、介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116048476A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339736A (zh) * | 2023-05-29 | 2023-06-27 | 英诺达(成都)电子科技有限公司 | Tcl交互界面的配置方法、装置、设备及存储介质 |
-
2023
- 2023-02-17 CN CN202310135324.5A patent/CN116048476A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339736A (zh) * | 2023-05-29 | 2023-06-27 | 英诺达(成都)电子科技有限公司 | Tcl交互界面的配置方法、装置、设备及存储介质 |
CN116339736B (zh) * | 2023-05-29 | 2023-07-28 | 英诺达(成都)电子科技有限公司 | Tcl交互界面的配置方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2022016848A1 (zh) | 一种根据服务角色的进行应用部署的方法及装置 | |
WO2021135584A1 (zh) | 前端项目框架的构建方法、装置、计算机设备及存储介质 | |
CN111309336B (zh) | 分布式应用的部署方法及装置 | |
US20040088397A1 (en) | System and method for management of software applications | |
CN111144839B (zh) | 一种项目构建方法、持续集成系统及终端设备 | |
US20200183683A1 (en) | Application architecture generation | |
WO2017041499A1 (zh) | 一种软件升级方法、系统和计算机可读存储介质 | |
CN116048476A (zh) | 命令行工具执行方法、装置、介质及设备 | |
EP3447635A1 (en) | Application architecture generation | |
WO2017052528A1 (en) | Selecting and loading firmware volumes | |
CN112363731A (zh) | 一种应用自动化部署方法、装置和计算机可读存储介质 | |
CN110716943B (zh) | 缺失数据补录方法、装置、计算机设备及存储介质 | |
CN113805965B (zh) | 一种外部插件安装的方法、装置、设备及可读介质 | |
CN111651352A (zh) | 一种仓库代码的合并方法及装置 | |
CN112506518A (zh) | 基于配置文件的编译方法和装置 | |
CN113448793A (zh) | 一种兼容多操作系统的系统监控方法及装置 | |
CN108052335B (zh) | 数据管理方法、装置、计算设备及存储介质 | |
CN113886008A (zh) | 一种虚拟机管理方法、系统、设备以及介质 | |
CN114201174A (zh) | 混合移动应用的构建方法、装置、电子设备及存储介质 | |
CN112486511A (zh) | 一种通过web生成操作系统安装镜像的方法 | |
CN111694578A (zh) | 一种获取基于WinSW的系统安装包的方法及装置 | |
CN111913720A (zh) | 一种程序部署方法及装置 | |
US20230244464A1 (en) | Environment establishment for a program in a server system | |
CN113032006B (zh) | 插件构建方法、装置、设备和存储介质 | |
CN116185435B (zh) | 一种基于脚手架的软件开发环境的开发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |