Takin API
关于什么是
takin可以参见 Takin 介绍
Cli
提供给 runner.hooks 的 Cli 实例,可通过 cli.command().option() 追加子命令和选项来干预命令行阶段实现自定义命令
import type { Plugin, Runner } from '@morjs/cli'
export default class MorJSPluginXXX implements Plugin {
name = 'MorJSPluginXXX'
apply(runner: Runner) {
// 可通过该 hook 拿到一个 cli 的实例
runner.hooks.cli.tap(this.name, (cli) => {
// 通过 cli.command 新建一个命令行指令
const command = cli.command(COMMAND_NAME, 'command指令描述')
// 注册 options 选项
command.option(rawName, '选项描述')
// eg: 创建一个名为 gogogo 的命令行指令,并添加 --prod 选项配置
// cli.command('gogogo', 'gogog 命令行').option('--prod', '开启生产模式')
// 那么在终端可运行 mor gogogo 或 mor gogogo --prod 命令行指令
})
}
}
Config
提供基础功能,用户配置支持
- 支持自定义配置配置文件的名称,如 mor.config.js
- 支持加载 js、ts、mjs、json 四种格式的配置文件
- 不同的文件使用不同的方式载入
- 支持用户自定义配置文件名称,并指定配置文件的支持类型,默认是 takin.config
- 支持通过插件注册配置字段和校验 schema
- 支持开启配置数组,并通过用户指定的字段来区分
- 支持配置合并(未完成)
logger
MorJS 对于日志进行了约束和定义,提供了一套简洁、美观的固定日志方法,只需引入 logger 即可使用
logger.init(level, options)
用于初始化 logger,多次调用会重复初始化同一个 logger
level: 配置日志级别,必填string类型,支持info|success|warn|error|silent,默认值infooptions: 通用 logger 配置,必填object类型,含四个非必填配置prefix: 日志前缀,非必填string类型,目前默认值[mor]debugPrefix: debug 前缀,非必填string类型,目前默认值 MorJSallowClearScreen: 是否清空屏幕,非必填boolean类型,目前默认值truecustomLogger: 自定义logger对象,非必填实例对象,用于取代现有logger实例
import { logger } from '@morjs/cli'
logger.init('info', { prefix: '[mor]', debugPrefix: 'mor' })
logger.withOptions(options)
用于返回携带特定 options 的 logger 实例,该实例后续的调用都含有已配置的特定 options
options: 必填object类型,含以下个非必填配置clear: 是否清空当前窗口,非必填boolean类型timestamp: 是否携带时间戳,非必填boolean类型color: 是否输出颜色,非必填boolean类型align: 是否对齐,非必填boolean类型symbol: 是否输出 symbol,非必填boolean|string类型update: 是否为更新,非必填boolean类型depth: 对象层级,非必填null|number类型
import { logger } from '@morjs/cli'
const logger = createLogger('info', {
debugPrefix: 'mor',
prefix: `[mor]`
}).withOptions({ color: false, align: true })
logger.info(msg, options)
在控制台打印 info 类型的日志输出
msg: 必填any类型,显示日志的输出内容options: 非必填object类型,配置项与logger.withOptions的options一致
logger.success(msg, options)
在控制台打印 success 类型的日志输出,参数配置与 logger.info 一致
logger.warn(msg, options)
在控制台打印 warn 类型的日志输出,参数配置与 logger.info 一致
logger.warnOnce(msg, options)
在控制台打印 warnOnce 类型的日志输出,相同内容只会输出一次,参数配置与 logger.info 一致
logger.error(msg, options)
在控制台打印 error 类型的日志输出,参数配置与 logger.info 一致
import { logger } from '@morjs/cli'
logger.info('info 日志输出')
logger.success('success 日志输出')
logger.warn('warn 日志输出')
logger.warnOnce('warnOnce 日志输出,相同信息只输出一次')
logger.warnOnce('warnOnce 日志输出,相同信息只输出一次')
logger.error('error 日志输出')

logger.deprecate(deprecatedMsg, hint, error)
在控制台打印一段 warn 类型的 deprecate 日志输出
deprecatedMsg: 必填any类型,显示日志的输出内容hint: 必填any类型,显示日志内容的提示error: 非必填object类型,通用error结构
import { logger } from '@morjs/cli'
logger.deprecate('deprecatedMsg 日志输出', 'hint 提示')
logger.debug(msg, ...args)
基于 debug npm 的 debug 日志输出
import { logger } from '@morjs/cli'
logger.debug('debug 日志输出,仅在开启 debug 时显示')
logger.time(label) & logger.timeEnd(label)
耗时性能日志输出, 需要 logger.time() 配合 logger.timeEnd() 一起使用
label: 必填string类型,打印同一label值从开始到结束之间的耗时,单位 ms
logger.clearScreen(type)
清空当前屏幕
type: 配置清屏设置,必填string类型,支持info|success|warn|error
logger.hasErrorLogged(error)
当前错误是否已输出,返回一个 boolean 值
error: 非必填object类型,通用error结构
logger.hasWarned
当前 logger 实例的 hasWarned 项,用于记录是否打印 warn 级别及以上报错日志
logger.hasErrored
当前 logger 实例的 hasErrored 项,用于记录是否打印 error 级别及以上报错日志
logger.options
当前 logger 实例的 options 配置,具体值可参考 logger.withOptions 的 options 配置项
logger.createLoading(msg, options)
可以创建一个 loading 日志对象
msg: 必填any类型,显示日志的输出内容options: 非必填object类型,含四个非必填配置clear: 是否清空当前窗口,非必填boolean类型timestamp: 是否携带时间戳,非必填boolean类型color: 是否输出颜色,非必填boolean类型align: 是否对齐,非必填boolean类型symbol: 是否输出 symbol,非必填boolean|string类型update: 是否为更新,非必填boolean类型depth: 对象层级,非必填null|number类型
logger.createLoading(msg) 返回携带特定 options 的 loadingLogger 的实例对象,该实例对象提供以下几个方法
.start(msg): 开始执行loadingLogger日志实例对象,并先打印一次msg内容msg: 非必填any类型,显示日志的输出内容,优先级大于createLoading的msg
.update(msg): 更新日志的输出内容msg: 必填any类型,显示日志的输出内容
.stop(): 停止loadingLogger日志实例对象的执行.success(msg, opts): 在控制台打印success类型的日志输出,参数配置与logger.info一致.fail(msg, opts): 在控制台打印error类型的日志输出,参数配置与logger.info一致.error(msg, opts): 在控制台打印error类型的日志输出,参数配置与logger.info一致
以下为示例代码:(真实的显示效果应为,每下一行的打印显示会自动替换前一行的显示,这里为了方便截图我在 init 里设置了 allowClearScreen,start 和 update 的 icon 是一个类转圈的动效,开发者可以自己尝试看一下效果)
import { logger } from '@morjs/cli'
const loading = logger.createLoading('创建进程日志').start()
try {
setTimeout(() => {
loading.update('当前进度50%')
}, 1500)
setTimeout(() => {
loading.stop()
loading.success('当前进程已完成')
}, 3000)
} catch (err) {
loading.fail(err)
}

logger.table(tableOptions, type, options)
在控制台打印 table 表格类型的日志输出
tableOptions: 必填object类型head: 表格 头的配置信息,string[]类型rows: 表格内容的配置信息,string[][]类型colWidths: 表格每列的宽度,number[]类型colAligns: 表格每列的对齐方式,Array<'left' | 'middle' | 'right'>类型- 其他配置项可查看源码或
typescript对应注释
type: 非必填string类型,支持info|success|warn|erroroptions: 非必填object类型,配置项与logger.withOptions的options一致
const table = {
head: ['head1', 'head2', 'head3'],
rows: [
['rows1-1', 'rows1-2', 'rows1-3'],
['rows2-1', 'rows2-2', 'rows2-3'],
['rows3-1', 'rows3-2', 'rows3-3']
],
colWidths: [30, 20, 20]
}
logger.table(table)

downloader
downloader.file.parseOptions(pathOrOptions)
解析 file 链接或选项
pathOrOptions: 链 接path或选项{ path, ...options }
import { downloader } from '@morjs/cli'
downloader.file.parseOptions(pathOrOptions)
downloader.file.supportProtocol(url)
判断是否支持处理当前链接(正则)
url: 链接
import { downloader } from '@morjs/cli'
downloader.file.supportProtocol(url) // true / false
downloader.file.getName(fileOptions)
基于 file 链接选项获取名称
fileOptions: file 链接选项{ path, ...options }
import { downloader } from '@morjs/cli'
downloader.file.getName(fileOptions)
downloader.file.download(fileOptions, dest)
下载 file 链接到指定目录
fileOptions: file 链接选项dest: 指定目录地址
import { downloader } from '@morjs/cli'
downloader.file.download(fileOptions, dest)
downloader.link.parseOptions(pathOrOptions)
解析 link 链接或选项
pathOrOptions: 链接或选项
import { downloader } from '@morjs/cli'
downloader.link.parseOptions(pathOrOptions)
downloader.link.supportProtocol(url)
判断是否支持处理当前链接(正则)
url: 链接
import { downloader } from '@morjs/cli'
downloader.link.supportProtocol(url) // true / false