initx 一个 Node.js 脚本引擎

2 天前
 imba97

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

774 次点击
所在节点    分享创造
3 条回复
imba97
2 天前
也可以全局安装 `initx`

```
npm i -g initx
```

这样执行的时候可以不写 `npx`

```
initx plugin list
initx plugin add git
# ...
```
imgfans
2 天前
这个好!收藏咯
imba97
2 天前
@imgfans 感谢支持 👍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1090643

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX