简要
最近发布的 v0.0.12 版本中移除了默认业务功能,转而加入了 插件系统
用了一周开发到目前的状态,我觉得 initx 的功能好的超出了我的预期(自嗨)
我其实很早之前就一直在写一些零散的脚本,把一些复杂的东西简单化,一般是放在仓库,有新环境用到的话要拉代码、配置、执行,感觉还挺麻烦
不管有没有重复造轮子,我非常喜欢 initx 以及享受开发过程 🤣
插件系统
把业务功能的选择交给使用者,将插件的包安装到全局即可,类似
npm i @initx-plugin/git -g非常骄傲的宣布,从现在开始 initx 是一个更方便的脚本引擎,它会负责
- 提供方便的入口
- 收集插件
- 收集匹配器命中的执行器
- 处理可能的用户交互
- 执行!🚀
而你,可以专注于写脚本
提供方便的入口
npx initx <something>作为免安装脚本,你可以直接使用 npx 执行,虽然它也会被安装在某个角落
收集插件
initx 会先从全局安装目录加载所有依赖,根据包名过滤出插件,动态引入插件代码
收集匹配器命中的执行器
匹配器和执行器是 initx 的两大核心,可以使用字符串和正则表达式,也可以通过数组组合它们
命中后匹配器的介绍和执行器会被收集起来
处理可能的用户交互
如果多个执行器被命中,则会清晰的展示插件名和匹配器介绍,让用户选择执行哪一个
而你
可以专注于写脚本!
starter
插件开发在此起步 initx-plugin-starter
import type { InitxCtx } from '@initx-plugin/core'
import { InitxHandler } from '@initx-plugin/core'
import { log } from '@initx-plugin/utils'
export default class StarterHandler extends InitxHandler {
matchers = [
{
matching: 'start',
description: 'Plugin starter'
}
]
async handle(ctx: InitxCtx, ...others: string[]) {
log.info('initx-plugin-starter is running 🎊')
log.info('ctx')
console.log(ctx)
log.info('others')
console.log(others)
}
}拉取项目后安装依赖
pnpm i得益于 unbuild 使用的 jiti,可以直接使用 stub 模式开发,无需每次打包
pnpm stub最后把本地包全局安装
npm i . -g现在只需要专注插件开发,以及测试你的脚本,比如
npx initx start user --name imba97得益于 cac,这个库帮我们处理好了指令,会输出
[ INFO ] initx-plugin-starter is running 🎊
[ INFO ] ctx
{
key: 'start',
cliOptions: { '--': [], name: 'imba97' },
optionsList: []
}
[ INFO ] others
[ 'user' ]祝你用餐愉快 🍴
评论区域将在可见后加载…