做爲一名程序員,仍是有一份有特點的在線簡歷會比較好吧……
在線簡歷很容易作得很醜哎……
套模板這種事情有點丟人呀……
那……幹嗎不用程序員最熟悉的命令行來寫簡歷呢?
啊咧?!html
上圖就是一個用vuejs在瀏覽器中模擬出來的終端界面,用這個來作一份簡歷仍是有點小酷吧?(在線體驗:dongsuo.github.io/terminal-re…,源碼:github.com/dongsuo/vue…)vue
OK,閒話少敘,來動手作一個吧。node
首先,你須要把這個項目(github.com/dongsuo/vue…) fork到你本身的Github目錄下,而後pull到本地。(若是你不明白這一步的話,如下是你能夠在谷歌或者百度輸入框輸入的關鍵詞:git,github,倉庫,repository,本地倉庫。全部關鍵詞能夠隨意組配,直到你明白這一步爲止,下同。)git
而後,在你本地的命令行工具中,進入本地項目目錄,執行 npm install
,等任務跑完,執行 npm run dev
就能夠了,你的默認瀏覽器會自動打開 http://localhost:8080 這個地址。(關鍵詞:nodejs, npm, 淘寶鏡像,node_modules目錄)程序員
接下來就是實質性的工做了,因爲vue-terminal-emulator
尚未文檔,因此這篇短文就算是文檔了,我會寫得儘可能詳細一些。github
按照慣例,先從目錄結構開始吧:vue-cli
├── build // 構建相關
├── config // 配置相關
├── docs // 構建輸出目錄
├── src // 源代碼
│ ├── components // 組件
│ ├── plugins // 插件
│ │ ├── commandList.js // 命令列表
│ │ └── taskList.js // 任務列表
│ ├── App.vue // 入口頁面
│ └── main.js // 入口 加載組件 初始化等
├── .babelrc // babel-loader 配置
├── eslintrc.js // eslint 配置項
├── .gitignore // git 忽略項
├── favicon.ico // favicon圖標
├── index.html // html模板
└── package.json // package.json複製代碼
基本結構就是vue-cli項目的默認結構,主要src目錄下的文件須要介紹一下:
components下是 VueTerminalEmulator 組件,主要的邏輯和樣式都封裝在這個文件中,你能夠徹底無論這個文件。npm
咱們主要須要配置的文件是 plugins/commadnList.js 和 plugins/taskList.js 這兩個文件,這兩個文件的基本結構是一致的,都 export一個對象,對象key是任務或者命令名稱,值是由 description 和 messages/task 組成的對象,基本的結構以下所示:json
{
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
}
}複製代碼
好了,核心內容就是這麼多,下面介紹一下上文中提到屢次的message對象:
{
time: generateTime(),
type: 'warning',
label: 'warning',
message: 'This is a Waning Message!'
}複製代碼
message對象目前支持如上四個字段:
npm run build
命令,而後把你的代碼push到Github上,點擊settings, 找到Github Pages,將source設置爲docs folder,點擊save就部署成功了。 以上就是作一個命令行簡歷所須要知道的所有內容了,若是還有小夥伴有問題的話,歡迎issue或者pr.
github.com/dongsuo/vue…