开发自己的脚手架(Rollup+Typescript)-(02)-(中间件模式)

对于A->b->c这一类的流程事件,可以采用分解这些事件,当需要用到这些事件操作时,我们将操作插入到核心事件完成所需要的不同步骤中。

实现一个流程处理函数

src/core/ware.ts

/**
 * 中间件方法类型
 */
export type Middleware<S> = (context: S) => Promise<void> | void

/**
 * 中间件类
 */
export class Ware<S>{
    private readonly middlewares: Array<Middleware<S>> = []
    /**
     * 注入中间件方法
     * @param middleware 
     */
    use(middleware: Middleware<S>): Ware<S> {
        this.middlewares.push(middleware)
        return this
    }

    /**
     * 执行所有中间件方法
     * @param context 
     */
    async run(context: S): Promise<void> {
        return await this.middlewares.reduce(
            (pre, current) => pre.then(() => current(context)),
            Promise.resolve())
    }
}
创建cli主方法

src/init/index.ts

import { Ware } from '../core/ware'
/**
 * 上下文对象类型
 */
export interface Context {
    name: string
}

/**
 * Ware实例
 */
const creator = new Ware<Context>()

// 注入方法一 打印当前上下文对象的 name
creator.use(async (context) => {
    console.log(context.name)
})

// 注入方法二 修改当前上下文对象的 name
creator.use(async (context) => {
    context.name = 'hello context'
})

// 注入方法三 打印当前上下文对象的 name
creator.use(async (context) => {
    console.log(context.name)
})

/**
 * CLI 主函数
 */
export const init = () => {

    // 定义上下文对象
    const context: Context = {
        name: 'hello cli'
    }
    // 执行所有中间件方法
    creator.run(context)
}
暴露模块方法

src/index.ts

export { init } from './init'
引用且执行
import { init } from './index'

// 执行CLI 主函数
init()Ï

运行测试
# 编译文件
yarn build

# cli工具名称
<projectName>

# 输出结果
# hello cli
# hello context

到此cli脚手架主体框架基本完成,后面会介绍命令行交互部分内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵忠洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值