文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
packages/command
调整 package.json
{
"name": "@oweqian/command",
"version": "0.0.0",
"description": "common command class",
"main": "lib/index.js",
// ...
"type": "module"
}
封装 Command 类
基于 Commander.js 进行二次封装,提供了一种模板化的方法来处理命令创建和执行。具体的命令需要通过继承 Command 类并实现所需的 getter 和方法来完成,这样做的好处是代码复用和结构清晰,减少了重复的命令设置代码。
/**
* 封装 Command 类
*/
class Command {
constructor(instance) {
// 命令行程序的实例
if (!instance) {
throw new Error("command instance must not be null!");
}
this.program = instance;
const cmd = this.program.command(this.command);
cmd.description(this.description);
cmd.hook("preAction", () => {
this.preAction();
});
cmd.hook("postAction", () => {
this.postAction();
});
if (this.options?.length > 0) {
this.options.forEach((option) => {
cmd.option(...option);
});
}
cmd.action((...params) => {
this.action(params);
});
}
// 命令的名称
get command() {
throw new Error("command must be implements");
}
// 命令的描述信息
get description() {
throw new Error("description must be implements");
}
// 命令的选项
get options() {
return [];
}
// 命令执行时的动作
action() {
throw new Error("action must be implements");
}
// 命令执行前的钩子
preAction() {
// empty
}
// 命令执行后的钩子
postAction() {
// empty
}
}
export default Command;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论