Calico 可以根據預設的規(guī)則妇蛀,通過一個模板和一個資料庫固惯,生成一個靜態(tài) Web 站點所需的 Html 文件洲守。Calico 會假裝自己是一個動態(tài)服務器涡驮。對 Calico 的規(guī)則和模板都是通過假裝 Calico 是動態(tài)服務器來確立的魄缚。
Calico 的工作原理
具體來說宝与,當 Calico 收到一個 Request,它會解析 Request 的 URL冶匹,并通過路由規(guī)則匹配到一個模板 View习劫。并通過模板 View 構造 html 頁面。模板 View 中可以嵌套用 JavaScript 寫成的小腳本徙硅,這些小腳本會通過 Request 的參數(從 URL 解析得來)來獲取對應的資源榜聂,這些資源可以是其他 html 頁面,也可以是 markdown 文件嗓蘑,甚至是 json 文件须肆。讀取的資源會通過小腳本嵌套再模板 View 最終渲染出的 html 頁面中。最終桩皿,這個 html 頁面作為一個 Response 被返回豌汇。
但 Calico 終究不是一個動態(tài) Web 服務器。實際上泄隔,Calico 僅僅只能一次性生成一個 Web 站點所需的所有 html 文件拒贱。它是這樣工作的。
首先,Calico 會挑選一組種子地址逻澳,默認是 “/
” 這個根地址闸天。之后,請求這些種子地址斜做,并渲染出 html 頁面苞氮。之后在 html 頁面中尋找所有指向站內的 URL,再以這些 URL 發(fā)起請求渲染更多的 html 頁面瓤逼。這個過程會遞歸地進行下去笼吟,直到找不到更多的指向站內的 URL 地址為止。
這一過程的原理類似爬蟲霸旗。這樣便可保證 Calico 生成的那一堆 html 文件贷帮,里面的任何一個指向站內的 URL 都是可以打開的。之后诱告,我們只需要把 Calico 生成的所有文件發(fā)布到某個靜態(tài) Web 站點即可撵枢。
安裝
Calico 目前只支持 Unix/Linux/macOS 平臺。
請確保安裝了 git蔬啡、ant诲侮、JDK1.8。
首先箱蟆,你需要挑選一個 Calico 所安裝的目標文件夾沟绪,用 Terminal 切換到該文件夾下。然后運行下面這兩行命令的任意一行空猜,來 clone 整個項目绽慈。
git clone git@github.com:Moskize91/Calico.git
git clone https://github.com/Moskize91/Calico.git
之后,輸入 cd Calico
辈毯。
進入項目文件夾之后坝疼,請輸入 ./build
來構造整個項目。當你看到……
BUILD SUCCESSFUL
Total time: 2 seconds
的字樣谆沃,說明 Calico 構造成功钝凶。否則,請確認你已經安裝了 ant 和 JDK1.8唁影。
之后耕陷,輸入 ./install
安裝 Calico。
其中可能需要你輸入 sudo 密碼据沈,輸入即可哟沫。看到
Success.
的字樣锌介,說明 Calico 安裝成功嗜诀。
第一個 Calico 模板
對于 Calico 而言猾警,模板+資源=站點。
我們先寫一個最簡單的的隆敢,不需要任何資源就可以使用的模板吧发皿。
mkdir example
cd example
新建一個名為 example 的空文件夾,作為我們的模板文件夾拂蝎。然后……
mkdir view
這個名為 view 的文件夾是專門存放模板 View 的雳窟。之后……
vim ./view/main.html
然后按下 i
輸入……
<html>
<body>hello world.</body>
</html>
然后按下 ESC
再輸入 :wq
并回車保存退出。
確保此時你處于 example
這個文件夾之中匣屡。
最后,輸入如下命令以 service 模式啟動 Calico……
calico service
當你看到
Running! Point your browser to http://127.0.0.1:8080/
表明 Calico 啟動成功拇涤,此時捣作,使用瀏覽器訪問 127.0.0.1:8080,就可以看到我們的 hello world 頁面了鹅士。
service 模式
Calico 以這種模式運行時券躁,會在本地監(jiān)聽特定的端口(默認 8080 )。使用瀏覽器通過這個端口掉盅,可以直接與 Calico 交互也拜。此時 Calico 就像一個動態(tài) Web 服務器一樣,針對瀏覽器的每一次 Request 僅僅生成一個 Response趾痘。
在本地以這種模式執(zhí)行 Calico慢哈,有助于調試你的模板。你對模板中的 View 文件永票,或 JavaScript 腳本文件卵贱,或資源文件進行修改之后,只需要刷新一下瀏覽器侣集,便可立即看到修改之后的效果键俱。
按下 Ctrl + C
結束 Calico 的 service 模式。
之后世分,我們嘗試使用 build 模式執(zhí)行 Calico编振。
首先確保你處于 example
文件夾中,輸入 ls
臭埋,此時你應該看到……
view
僅有一個 view 文件夾踪央,這就是我們剛才新建的。然后斋泄,輸入如下命令并執(zhí)行杯瞻。
calico build
看到……
Clean target directory: /Users/taozeyu/test/example/target
delete file /Users/taozeyu/test/example/target
Copy resource files
Generate html pages.
generate path /
表明執(zhí)行成功了,此時輸入 ls
炫掐,可以看到……
target view
多出一個 target 文件夾魁莉,這是 Calico 生成的。
我們使用 ls target
查看這個文件夾里面的文件∑煅洌可以看到……
index.html
我們使用瀏覽器打開這個文件畦浓,可以看到瀏覽器中顯示……
hello world
這正是 Calico 使用我們的模板 View 生成的目標 html 文件。
build 模式
Calico 以這種模式執(zhí)行時检疫,會在從種子地址開始讶请,遞歸地生成所有的可能的 html 文件。每當它產生一個 html 文件屎媳,它便立即搜集這個 html 中每一個指向站內的 URL夺溢,并通過這些 URL 繼續(xù)生成更多的 html 文件。直到沒有更多的 html 文件可以生成為止烛谊。