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
,默认值info
options
: 通用 logger 配置,必填object
类型,含四个非必填配置prefix
: 日志前缀,非必填string
类型,目前默认值[mor]
debugPrefix
: debug 前缀,非必填string
类型,目前默认值 MorJSallowClearScreen
: 是否清空屏幕,非必填boolean
类型,目前默认值true
customLogger
: 自定义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
|error
options
: 非必填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