編者注:我們發現了比較有趣的系列文章 《30天學習30種新技術》
,準備翻譯,一天一篇更新,年終禮包。下面是第8天的内容。
到目前為止,我們的
“30天學習30種技術” 系列已經讨論了 Bower 、 AngularJS 和 GruntJS 。這些最新的技術可以幫助開發者更高效地開發,也可以減輕開發者的負擔。今天,我們将學習另一項新JavaScrit技術,它叫做Harp。在本文中,我們将開始了解Harp的基礎,接着我們将建立一個簡單的Harp應用,最後将此應用部署到OpenShift。Harp是什麼?
Harp是為現代web應用準備的開源靜态伺服器。它可以為Jade、Markdown、EJS、CoffeeScript、LESS、Stylus和HTML、CSS、Javascript提供服務,無需任何配置。
由于越來越多的開發轉向用戶端,開發者們開始使用替代語言,然後将其編譯為原生語言。比如,我們使用諸如Jade和EJS之類的模闆庫,而不是直接編寫HTML。同理,我們可以使用CoffeeScript,而不是直接寫JavaScript。至于樣式,我們可以用Stylus和LESS取代CSS。
Harp是零配置的伺服器,用于為靜态資源提供服務。它内置了對
.jade
.markdow
.ejs
.coffee
.less
.styl
.html
.css
.js
的支援。
Harp依賴
Harp依賴于NodeJS和NPM包管理器(node.js安裝自帶NPM)。你可以從
官網下載下傳最新版的NodeJS。一旦安裝了node.js和NPM,就可以使用NPM安裝Harp。
安裝Harp
輸入如下指令安裝Harp。
npm install -g harp
以上指令将全局安裝harp包,這樣在任何目錄都可以使用
harp
指令。
(取決于你系統的設定,你可能需要在指令前加上
sudo
。)
建立Harp項目
harp
指令行讓我們可以友善地建立harp應用。建立一個應用,隻需使用
harp init
harp init blog
這會建立一個名為
blog
的目錄,結構如下:

harp建立的項目預設使用Jade(html)和LESS(css)。
啟動Harp服務
我們可以使用
harp server
指令來運作應用:
$ cd blog
$ harp server
_____ _____ _____ _____
/l l /l l /l l /l l
/::l____l /::l l /::l l /::l l
/:::/ / /::::l l /::::l l /::::l l
/:::/ / /::::::l l /::::::l l /::::::l l
/:::/ / /:::/l:::l l /:::/l:::l l /:::/l:::l l
/:::/____/ /:::/__l:::l l /:::/__l:::l l /:::/__l:::l l
/::::l l /::::l l:::l l /::::l l:::l l /::::l l:::l l
/::::::l l _____ /::::::l l:::l l /::::::l l:::l l /::::::l l:::l l
/:::/l:::l l /l l /:::/l:::l l:::l l /:::/l:::l l:::l____l /:::/l:::l l:::l____l
/:::/ l:::l /::l____l/:::/ l:::l l:::l____l/:::/ l:::l l:::| |/:::/ l:::l l:::| |
l::/ l:::l /:::/ /l::/ l:::l /:::/ /l::/ |::::l /:::|____|l::/ l:::l /:::|____|
l/____/ l:::l/:::/ / l/____/ l:::l/:::/ / l/____|:::::l/:::/ / l/_____/l:::l/:::/ /
l::::::/ / l::::::/ / |:::::::::/ / l::::::/ /
l::::/ / l::::/ / |::|l::::/ / l::::/ /
/:::/ / /:::/ / |::| l::/____/ l::/____/
/:::/ / /:::/ / |::| ~| ~~
/:::/ / /:::/ / |::| |
/:::/ / /:::/ / l::| | Harp v0.9.4
l::/ / l::/ / l:| | Static Web Server
l/____/ l/____/ l|___| By Chloi Inc. 2012-2013
Your server is listening at http://localhost:9000/
現在,通路
http://localhost:9000/你會看到如下頁面:
https://www.openshift.com/sites/default/files/images/harp-sample-app.png我們打開
index.jade
檔案,做一些改動:
h1 Welcome to Harp.
h3 This is my blog. Enjoy.
重新整理一下浏覽器,我們就能看到改動了。
部署到雲端
部署harp應用有多種方式,詳見
文檔。我将介紹如何部署到
OpenShift。
是一個公開的PAAS,你可以使用OpenShift免費部署Java、NodeJS、Ruby、Python和PHP應用。
在我們部署應用到OpenShift之前,我們需要先設定一下:
- 注冊一個 OpenShift賬号 。注冊是完全免費的,Red Hat給每個使用者三枚免費的Gear,可以用Gear運作你的應用。在寫作此文的時候,每個使用者能免費使用總共 1.5 GB 記憶體和 3 GB 硬碟空間。
- 安裝 rhc用戶端工具
是ruby gem,是以你的機子上需要裝有 ruby 1.8.7以上版本。 隻需輸入rhc
即可安裝 rhc 。如果你已經安裝過了,確定是最新版。運作sudo gem install rhc
即可更新。關于配置rhc指令行工具的詳細資訊,請參考: https://openshift.redhat.com/community/developers/rhc-client-tools-installsudo gem update rhc
- 使用 rhc 的 setup 指令配置你的 OpenShift 賬号。這個指令會幫助你建立一個命名空間,同時将你的ssh公鑰上傳至 OpenShift 伺服器。
設定之後,我們可以通過如下指令建立一個新的OpenShift應用。
rhc create-app blogonopenshift nodejs-0.10
這會為我們建立一個名為gear的應用容器,并自動配置相應的SELinux政策和cgroup設定。OpenShift同時會為我們建立一個私有的git倉庫,并将其克隆到本地。最後,OpenShift會自動配置DNS。應用可以在如下位址通路
http://blogonopenshift-{domain-name}.rhcloud.com/
将
{domain-name}
替換為你自己的OpenShift域名(也叫命名空間)。
接着,跳轉到blogonopenshift檔案夾,初始化一個新的harp項目。
cd blogonopenshift
harp init _harp
這會在blogonopenshift目錄的
_harp
檔案夾中建立harp應用。
修改blogonopenshift目錄中的
package.json
,添加harp依賴。
{
"dependencies": {
"harp" : ">=0.8"
}
}
然後,使用NPM安裝依賴:
npm install
接着修改
server.js
:
require('harp').server("_harp", { ip : process.env.OPENSHIFT_NODEJS_IP, port: process.env.OPENSHIFT_NODEJS_PORT})
在上面的例子中,我們建立了一個harp伺服器的執行個體。我們把與該伺服器綁定的OpenShift環境下的ip位址和端口号傳遞給它。在雲環境中,建議使用環境變量,而不是寫死了的值。
如果你現在将代碼推送到OpenShift,它還不能工作。這是因為harp API沒有提供配置IP位址的選項。為此我在GitHub的harp倉庫上開了一個
工單。就目前而言,我們需要打開
node_modules/harp/lib
目錄下的
index.js
檔案,修改下
server
函數:
/**
* Server
*
* Host a single Harp Application.
*/
exports.server = function(dirPath, options, callback){
connect.createServer(
middleware.regProjectFinder(dirPath),
middleware.setup,
middleware.underscore,
middleware.mwl,
middleware.static,
middleware.poly,
middleware.process,
middleware.fallback
).listen(options.port,options.ip , callback)
本地送出代碼,然後推送變動到雲端。
git add .
git commit -am "blogonopenshift app deployed to cloud"
git push
推送代碼之後,應用被部署到OpenShift上,我們可以在
http://blogonopenshift-{domain-name}.rhcloud.com上通路我們的應用。我們的示例應用跑在
http://blog-shekhargulati.rhcloud.com上。