initx 一个 Node.js 脚本引擎

查看 16|回复 1
作者:imba97   
initx 一个脚本引擎
npx initx
它只做以下几件事
  • 提供方便的入口
  • 收集插件
  • 收集匹配器命中的执行器
  • 处理可能的用户交互
  • 执行!🚀

    所有具体的操作,会通过插件的形式进行
    我目前写了一些基本的,我个人用得到的插件,我想尽可能减少我使用一些工具(例如 git 、gpg )的复杂度
    每个插件是一个 npm 库,首先可以先安装插件管理工具,这也是一个插件
    npm i -g @initx-plugin/manager
    可以通过这个更方便的查看、添加、移除、更新插件

    插件示例
    # 安装插件
    npx initx plugin add git
    # initx
    npx initx user imba97 [email protected]
    # 等于
    git config --global user.name imba97
    git config --global user.email [email protected]
    设置 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
  • imba97
    OP
      
    也可以全局安装 `initx`
    ```
    npm i -g initx
    ```
    这样执行的时候可以不写 `npx`
    ```
    initx plugin list
    initx plugin add git
    # ...
    ```
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部