A terminal emulator in Vue
message 对象对应于命令行中的单条message,其基本结构如下: { time: generateTime(), type: 'warning', label: 'warning', message: 'This is a Waning Message!' }
message对象的配置目前支持如上四个字段,其基本含义如下:
- time字段可省略,建议使用提供的 generateTime 方法,也可自己配置;
- type可省略,目前支持5个值:info,warning,success,error,system,分别对应5种颜色,用于label字段的高亮;
- label字段可省略,可随意赋值,但是不建议太长,影响美观;
- message为必须字段就是纯文本内容;
命令行的主要配置文件是 plugins/commadnList.js 和 plugins/taskList.js 这两个文件,这两个文件的基本结构是一致的,都 export一个对象,对象key是任务或者命令名称,值是由 description 和 messages(task) 组成的对象,基本的结构如下所示:
{
commandOrTask:{
description:'',
messagesOrTask:[]//(function)
}
}
VueTerminalEmulator 组件会import这两个文件,根据其中的配置生成帮助项并执行相应的指令,其中description即为'help'指令中各个命令的帮助信息。
// VueTerminalEmulator 中引入配置文件
import commandList from './../plugins/commandList'
import taskList from './../plugins/taskList'
其中,commandList 中存放静态的指令,指令执行之后,直接列出所有 message,然后指令结束,无需等待。而taskList 中是异步的任务,指令执行后组件会进入loading状态,任务完成后,通过resolve一个消息来通知VueTerminalEmulator 组件任务结束,解除loading状态(关键词:异步、promise、resolve)。以下是这两种命令的例子: 异步任务:
help是典型的静态指令:
commandList 中的核心是messages数组,数组内是多个message对象,执行command时,会将command中的message显示在Terminal窗口中,比较简单,不多说,一个示例就解决了:
contact: {
description: 'How to contact author',
messages: [
{ message: 'Website: http://xiaofeixu.cn' },
{ message: 'Email: xuxiaofei915@gmail.com' },
{ message: 'Github: https://github.com/dongsuo' },
{ message: 'WeChat Offical Account: dongsuo' }
] }
就是这么简单,不需要更多的语言。
taskList 的核心是名称与任务名一致的函数,该函数接受两个参数:一个函数(pushToList)和命令行(input)的输入值。你可以根据input值来执行具体的任务,然后将message作为参数调用pushToList().当任务结束时,需要返回一个promise,promise要resolve一个message对象通知组件任务结束,如有需要,也可以reject一个message对象通知组件任务出错,示例代码:
echo: {
description: 'Echoes input, Usage: echo <your input>',
//echo将用户的输入原封不动地返回,显示在terminal窗口中
echo(pushToList, input) {
//解析用户输入
input = input.split(' ')
input.splice(0, 1)
const p = new Promise(resolve => {
// 将message对象作为参数调用pushToList()
pushToList({ time: generateTime(), label: 'Echo', type: 'success', message: input.join(' ') });
// 通过resolve一个message对象通知组件任务结束
resolve({ type: 'success', label: '', message: '' })
})
// 返回 promise 对象
return p
}
}
当你已经确认简历做好、没有bug之后,就可以部署了,首先执行npm run build
命令,然后把你的代码push到Github上,点击settings, 找到Github Pages,将source设置为docs folder,点击save就部署成功了。