initx 一个 Node.js 脚本引擎

imba97 · 2024-11-18 22:08:51 · 412 次点击

initx 一个脚本引擎

npx initx <something>

它只做以下几件事

  • 提供方便的入口
  • 收集插件
  • 收集匹配器命中的执行器
  • 处理可能的用户交互
  • 执行!🚀

所有具体的操作,会通过插件的形式进行

我目前写了一些基本的,我个人用得到的插件,我想尽可能减少我使用一些工具(例如 git 、gpg )的复杂度

每个插件是一个 npm 库,首先可以先安装插件管理工具,这也是一个插件

npm i -g @initx-plugin/manager

可以通过这个更方便的查看、添加、移除、更新插件

插件示例

# 安装插件
npx initx plugin add git

# initx
npx initx user imba97 mail@imba97.cn

# 等于
git config --global user.name imba97
git config --global user.email mail@imba97.cn

设置 Git GPG 签名

# initx
npx initx gpg true
# 设置 GPG Key ,自动查询,如果只有一个则设置该 Key ,如果有多个则让用户选择
npx initx gpg

# 等于
git config --global commit.gpgsign true
git config --global user.signingkey 92038B3E14C0D332542FB082B851A3E43D739400
git config --global gpg.program D:/GnuPG/gpg.exe

快速复制

# 安装插件
npx initx plugin add cp
# SSH 公钥
npx initx cp ssh
# GPG 公钥
npx initx cp gpg
# 当前目录
npx initx cp cwd

插件开发

提供插件开发起步项目 initx-plugin-starter

插件主要是匹配器执行器,通过配置的匹配器匹配用户输入内容,执行对应的操作

匹配器的写法支持很多种,以下是 @initx-plugin/git 插件的写法

export default class GitPlugin extends InitxPlugin {
  matchers = {
    [GitMatcher.Init]: {
      // 以下三种任意一个匹配成功,都返回类型 GitMatcher.Init
      matching: [
        /^( https?|git):\/\/.*\.git$/,
        /^(git@.*\.git)$/,
        /^ssh:\/\/git@.*\.git$/
      ],
      description: 'Initialize a new git repository'
    },

    [GitMatcher.User]: {
      matching: 'user',
      description: 'Set user name and email for git configuration'
    },

    // 可以写相同的 matching ,这会让用户选择,最后返回用户选择的 GitMatcher 类型
    [GitMatcher.Gpg]: {
      matching: 'gpg',
      description: 'Enable or disable GPG signing for git commits'
    },

    [GitMatcher.GpgKey]: {
      matching: 'gpg',
      description: 'Set GPG key for git commits'
    }
  }

  async handle({ key }: InitxContext, type: GitMatcher, ...others: string[]) {
    switch (type) {
      case GitMatcher.Init: {
        await repositoryHandle(key, ...others)
        break
      }
      // ...
    }
  }
}

不同插件指令也可重复,会让用户选择

Github:initx-collective/initx

举报· 412 次点击
登录 注册 站外分享
3 条回复  
imba97 楼主 小成 2024-11-18 22:24:53
也可以全局安装 `initx` ``` npm i -g initx ``` 这样执行的时候可以不写 `npx` ``` initx plugin list initx plugin add git # ... ```
imgfans 初学 2024-11-19 06:37:13
这个好!收藏咯
imba97 楼主 小成 2024-11-19 13:14:23
@imgfans 感谢支持 👍
返回顶部