项目整合
跟现有业务项目整合是 Semo
开发的初衷,如果一个项目已经有了自定义的用着还不错的命令行工具,那么要慎重考虑要不要换成 Semo
风格的,好在 Semo
整合比较简单,如果项目中之前没有命令行的基础设施,那么推荐尝试 Semo
。
为什么要整合
- 获得命令行基础设施,一个项目总有一些操作不适合或者来不及做到后台里,通过一个命令行工具,可以更简单的和系统和数据进行交互。
- 获得脚本基础设施,总有一些脚本需要执行,脚本起什么名字,放什么位置,以及如何跟业务或者数据进行交互都是常见的需求。
- 可以使用相关的
Semo
插件,并且通过配置影响和改变插件的行为。 - 获得一个业务相关的
REPL
环境,可以任意调用项目中封装的方法,或者跟一些封装的基础设施进行交互。
项目整合方式
不一定所有的特性都需要,按需使用即可。
1. 将 Semo
添加为项目依赖
这里以 yarn
为例:
yarn add @semo/cli
2. 在项目根目录进行初始化
semo init [--typescript]
这里看项目是否是基于 Typescript 搭建的,如果是就带上 --typescript
参数。初始化过程会在项目根目录新建一个配置文件 .semorc.yml
,并且新增了一个 bin/semo
目录,理论上不会和现有的项目有冲突。
3. 添加一些命令或脚本
semo generate command xxx
semo generate script yyy
4. 定义项目自己的插件
类似于渐进式开发的理念,一个插件如果只是自己的项目中使用,可以将插件作为项目代码的一部分,等优化成熟了,也很容易转成 npm 包的形式与其他项目分享。
semo generate plugin zzz
5. 将业务代码注入到 REPL 环境
参见 插件开发->例子2:实现 hook_repl
,可以看到是如何将方法注入到 REPL
的。注意所有的方法都只能注入到 REPL 的 Semo 对象,这是对 REPL 变量空间的保护。如果是业务方法,只要引入,然后按照 hook_repl
的格式要求返回即可。如果要让方法生效,还需要自己去处理方法对环境的依赖,比如连接数据库等。