天天看點

Day 8: Harp.JS——現代靜态web伺服器

編者注:我們發現了比較有趣的系列文章 《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

的目錄,結構如下:

Day 8: Harp.JS——現代靜态web伺服器

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.

重新整理一下浏覽器,我們就能看到改動了。

Day 8: Harp.JS——現代靜态web伺服器

部署到雲端

部署harp應用有多種方式,詳見

文檔

。我将介紹如何部署到

OpenShift

是一個公開的PAAS,你可以使用OpenShift免費部署Java、NodeJS、Ruby、Python和PHP應用。

在我們部署應用到OpenShift之前,我們需要先設定一下:

  1. 注冊一個 OpenShift賬号 。注冊是完全免費的,Red Hat給每個使用者三枚免費的Gear,可以用Gear運作你的應用。在寫作此文的時候,每個使用者能免費使用總共 1.5 GB 記憶體和 3 GB 硬碟空間。
  2. 安裝 rhc用戶端工具

    rhc

    是ruby gem,是以你的機子上需要裝有 ruby 1.8.7以上版本。 隻需輸入

    sudo gem install rhc

    即可安裝 rhc 。如果你已經安裝過了,確定是最新版。運作

    sudo gem update rhc

    即可更新。關于配置rhc指令行工具的詳細資訊,請參考: https://openshift.redhat.com/community/developers/rhc-client-tools-install
  3. 使用 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

上。